我有一个数据集如下:
name | $ | letter
adam, 34, c
beny, 45, e
adam, 55, a
beny, 87, t
我想提取每个名字捐赠的最多$,并附上相应的字母。 所以对于亚当,我会得到:亚当,55,a。
如果我使用:
df.groupby('name')[['$']].max()
没有给我相应的信件。
如果我使用:
df.groupby('name')[['$','letter']].max()
我得到字母表中的最大$和最高字母。
答案 0 :(得分: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
重置它们。