数据框按最大值排序并显示行名称

时间:2017-03-18 14:34:57

标签: python pandas dataframe

我有像这样的数据框

Name    Shop   Sales
a        First  10
c        Second 5
b        First 8
d        Second 4
e        Third 30
g        First 11

我希望从“名称”列中获取“销售”列中值最高的值,按“商店”分组并排序以使最高值“销售”。 所以实际上我想回复这个:

Third  e  30
First  g  11
Second  c  5

我设法做到了:

grouped=df.groupby(['Shop'], sort=False)['Sales'].max()
grouped.sort_index(ascending=False)

产生:

Third   30
First   11
Second   5

但我不确定如何访问它的相应名称。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用DataFrameGroupBy.idxmax作为max Sales值的索引,然后按locsort_values进行选择:

print (df.groupby('Shop')['Sales'].idxmax())

Shop
First     5
Second    1
Third     4
Name: Sales, dtype: int64

print (df.loc[df.groupby('Shop')['Sales'].idxmax()].sort_values('Sales', ascending=False))
  Name    Shop  Sales
4    e   Third     30
5    g   First     11
1    c  Second      5

答案 1 :(得分:1)

您可以使用nlargest方法:

In [115]: df.groupby('Shop', as_index=False) \
            .apply(lambda x: x.nlargest(1, columns='Sales')) \
            .reset_index(level=0, drop=True)
Out[115]:
  Name    Shop  Sales
5    g   First     11
1    c  Second      5
4    e   Third     30

或者,如果您不需要原始索引值 - 这是@jezrael的更好方法:

In [122]: df.set_index('Name').groupby('Shop')['Sales'].nlargest(1).reset_index()
Out[122]:
     Shop Name  Sales
0   First    g     11
1  Second    c      5
2   Third    e     30