最近我正在使用这个数据集
import pandas as pd
data = {'Product':['Box','Bottles','Pen','Markers','Bottles','Pen','Markers','Bottles','Box','Markers','Markers','Pen'],
'State':['Alaska','California','Texas','North Carolina','California','Texas','Alaska','Texas','North Carolina','Alaska','California','Texas'],
'Sales':[14,24,31,12,13,7,9,31,18,16,18,14]}
df1=pd.DataFrame(data, columns=['Product','State','Sales'])
df1
我想找到销售额最高的 3 个组
grouped_df1 = df1.groupby('State')
grouped_df1.apply(lambda x: x.sort_values(by = 'Sales', ascending=False))
所以我有一个像这样的数据框
现在,我想找到销量最高的前 3 个州。 我尝试使用
grouped_df1.apply(lambda x: x.sort_values(by = 'Sales', ascending=False)).head(3)
# It gives me the first three rows
grouped_df1.apply(lambda x: x.sort_values(by = 'Sales', ascending=False)).max()
#It only gives me the maximum value
预期结果应该是:
Texas: 31
California: 24
North Carolina: 18
那么,我该如何解决这个问题呢?因为有时,一个州可能有 3 个最高销售额,例如阿拉斯加可能有 3 个最高销售额。当我简单排序时,前 3 名将是阿拉斯加,并且找不到其他 2 个组。
非常感谢!
最佳答案
您可以添加一个名为 Sales_Max_For_State
的新列,然后使用 drop_duplicates 和 nlargest :
>>> df1['Sales_Max_For_State'] = df1.groupby(['State'])['Sales'].transform(max)
>>> df1
Product State Sales Sales_Max_For_State
0 Box Alaska 14 16
1 Bottles California 24 24
2 Pen Texas 31 31
3 Markers North Carolina 12 18
4 Bottles California 13 24
5 Pen Texas 7 31
6 Markers Alaska 9 16
7 Bottles Texas 31 31
8 Box North Carolina 18 18
9 Markers Alaska 16 16
10 Markers California 18 24
11 Pen Texas 14 31
>>> df2 = df1.drop_duplicates(['Sales_Max_For_State']).nlargest(3, 'Sales_Max_For_State')[['State', 'Sales_Max_For_State']]
>>> df2
State Sales_Max_For_State
2 Texas 31
1 California 24
3 North Carolina 18
关于python - 在Python中使用group by和排序后如何获得数据框中销量前3名的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64779763/