繁体   English   中英

Pandas 分组后排序和限制分组

[英]Pandas sort and limit groups after group by

我想创建 dataframe 显示给定年份的销售额。 最终目标是展示全年销售额最高的三种产品,但数据按季度细分。

我根据包含相关数据的另一个 dataframe df创建了 dataframe result

result = df.groupby(['Product', 'Order Date']).sum()

                       Quantity Ordered
Product     Order Date  
 Product 1      2019Q1              787
                2019Q2             1067
                2019Q3              865
                2019Q4             1418
       ...         ...              ...
Product 90      2019Q1             1356
                2019Q2             1884
                2019Q3             1338
                2019Q4             2287

现在我想对其进行排序,使“订购数量”总数最高的产品排在最前面,然后只取前 3 个产品。

如果可以在 groupby 之前对其进行排序,那也可以,只要达到最终目标并且生成的 dataframe 看起来与上面显示的相同,但排序并限于前 3 个产品。

我问是因为我找不到针对这个特定案例的任何解决方案或任何类似的足以适用的解决方案。

IIUC,对值进行排序后需要第二个 groupby:

(df
# group (as columns) and sum
.groupby(['Product', 'Order Date'], as_index=False).sum()
# now sort the values
.sort_values(by='Quantity Ordered')
# keep the top 3 per date
.groupby('Order Date').head(3)
)

注意。 未经测试,因为没有提供可重现的输入

我最终在 groupby 之前确定了前三名产品,并在分组之前简单地过滤掉了不相关的产品。

totalByProduct = (frame).groupby(['Product']).sum()
totalByProduct.sort_values(by=['Quantity Ordered'], ascending=False, inplace=True)
topProductsList = list(totalByProduct.head(3).index)

result = df[df['Product'].isin(topProductsList)].groupby(['Product', 'Order Date']).sum()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM