python - 在Python中使用group by和排序后如何获得数据框中销量前3名的数据?

标签 python

最近我正在使用这个数据集

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

所以我有一个像这样的数据框

enter image description here

现在,我想找到销量最高的前 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/

相关文章:

python - 获取 Tkinter 窗口的每个子小部件

python - 如何在每次请求 Flask 时重新加载配置文件?

python - 我如何在 R 中以与 python 相同的方式进行联合绘图(seaborn 包)

python - 列 Pandas 的百分比

python - cv2.VideoCapture 无法在 Mac 主机上的 docker 容器中工作

Python 请求发布包含 nan 的 json

Python - 在 Control+C 上杀死多个线程

python - 同步 AMQP 发布

python - 更快地创建多个数据帧。 for循环太慢

python - 使用 BOTO-Python 列出表的 Amazon DynamoDB 中的所有主索引和辅助索引