groupby列,同时显示其他列

时间:2017-06-17 05:54:36

标签: python pandas

我有一个数据集如下:

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()

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

1 个答案:

答案 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重置它们。