如何从Pandas DataFrame中分组、排序和提取第二高的数量?



我希望根据客户对pandas数据框进行分组,根据数量对其进行排序,并返回包含数量第二高值的整个行。

我有这样的东西:

customer  item  quantity 
0        A     p         5
1        A     p         8
2        A     q         9
3        A     q         2
4        B     p         3
5        B     p         6

我能够返回一个包含行与最大数量的数据帧。我使用:

idx=df.groupby(by='customer')['quantity'].idxmax()
df_max=df.loc[idx,]

返回如下数据帧:

customer  item  quantity
2        A     q         9
5        B     p         6

但是,我还需要一个数量第二高的Dataframe,我被难住了。

我希望返回的数据框看起来像这样:

customer  item  quantity
1        A     p         8
4        B     p         3

谢谢!

您可以尝试pandas.core.groupby.GroupBy.nth从已排序的数据框中取第n行,注意索引从0开始。

out = (df.sort_values('quantity', ascending=False)
.groupby('customer', as_index=False).nth(1))
print(out)
customer item  quantity
1        A    p         8
4        B    p         3
df.groupby("customer").agg({'quantity': list}).apply(lambda x: sorted(x.quantity)[-2], axis=1)

最新更新