2017-06-17 63 views
3

我有一個數據集如下:GROUPBY列同時顯示其他列

name | $ | letter 
adam, 34, c 
beny, 45, e 
adam, 55, a 
beny, 87, t 

我想提取由每名捐贈最多$,與相應的字母。 所以對於亞當,我會得到:亞當,55歲,一個。

如果我使用:

df.groupby('name')[['$']].max() 

,不給我相應的字母。

如果我使用:

df.groupby('name')[['$','letter']].max() 

我得到的最大$和字母表中最高的信。

回答

4

使用DataFrameGroupBy.idxmax爲最大值的索引,然後通過loc選擇:

print (df.groupby('name')['$'].idxmax()) 
name 
adam 2 
beny 3 
Name: $, dtype: int64 

df = df.loc[df.groupby('name')['$'].idxmax()] 
print (df) 
    name $ letter 
2 adam 55  a 
3 beny 87  t 

sort_values,然後再另一種解決方案使用GroupBy.last

df = df.sort_values('$').groupby('name', as_index=False).last() 
print (df) 
    name $ letter 
0 adam 55  a 
1 beny 87  t 

差異的解決方案是idxmax讓原來的指標, last重置它們。

+0

謝謝。我很感激。 –

相關問題