[英]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.