2015-10-13 62 views
4

大熊貓數據框中選擇行我有一個熊貓數據幀,它看起來像:與最高得分

Name Candidates Qualifier Score 
AAA AAA_1  Yes  0 
AAA AAA_2  Yes  10 
AAA AAA_3  No  20 
BBB BBB_1  No  1 
BBB BBB-2  Yes  10 
BBB BBB_3  Yes  50 

我想在每一個「名稱」爲最高分,選擇的前兩名候選人。我怎樣才能做到這一點?

回答

4

您可以排序的「名稱」和「分數」的東風,然後在「名稱」 groupby,並呼籲head(2)拿到第2排的每個組:

In [228]: 
df.sort(['Name','Score'], ascending=False).groupby('Name').head(2) 

Out[228]: 
    Name Candidates Qualifier Score 
5 BBB  BBB_3  Yes  50 
4 BBB  BBB-2  Yes  10 
2 AAA  AAA_3  No  20 
1 AAA  AAA_2  Yes  10 
+0

@DSM抱歉,這是錯誤的嗎? – EdChum

+1

OP在「每個名稱中的前兩名候選人」之後。 – DSM

+0

如果我沒有錯,問題就是每個名稱得分最高的前兩名'候選人'。 –

0

呃,看到我最終用與EdChum的answer相同的方法,這是我的貢獻,這是我的評論有點長。如果你想打印名字和候選人,你可以像這樣使用一個sort聲明。

Sorted = df.sort(['Score'], ascending = False).groupby('Name').head(2) 
print Sorted.sort(['Candidate'], ascending = True) 

    Name Cand Score 
1 AAA AAA_2  10 
2 AAA AAA_3  20 
4 BBB BBB_2  10 
5 BBB BBB_3  50 
+0

這不似乎解決了問題的「按名稱」部分。 – DSM

+0

@DSM是的,我發現後發現。我現在正在正確回答 – SirParselot