Pandas分组排序问题:每日销量列的月度销量统计及排名需求
解决方案:按卖家统计月度水果销量
针对你的需求,苹果和甜瓜的每日销量是每个卖家的固定值,直接用sum()会重复累加同一卖家的多行相同值,无法得到预期结果;而草莓需要统计每日实际销量的总和。可以通过以下两种方式实现:
方法一:拆分处理后合并
# 提取苹果、甜瓜的固定日销量(同一卖家值唯一,用first()/last()/max()均可) fixed_daily_sales = dfFruit.groupby('seller')[['Apples sold every day', 'Melons sold every day']].first() # 统计草莓的总销量 strawberry_total = dfFruit.groupby('seller')['Strawberries'].sum().rename('Strawberries total') # 合并结果并整理列名 total_sales = fixed_daily_sales.join(strawberry_total).rename(columns={ 'Apples sold every day': 'Apple sold', 'Melons sold every day': 'Melon sold' }) # 按苹果销量降序排序(可替换为其他列,如'Melon sold'或'Strawberries total') total_sales_sorted = total_sales.sort_values('Apple sold', ascending=False)
方法二:一次性聚合(更简洁)
使用agg()方法对不同列指定不同的聚合规则,一次完成统计:
total_sales = dfFruit.groupby('seller').agg( Apple_sold=('Apples sold every day', 'first'), Melon_sold=('Melons sold every day', 'first'), Strawberries_total=('Strawberries', 'sum') ).sort_values('Apple_sold', ascending=False)
关键说明
- 苹果和甜瓜的列用
first()(或last()/max()/min())是因为同一卖家的所有行值完全一致,取任意一个都能得到正确的固定日销量,避免了sum()导致的重复累加问题。 - 草莓列用
sum()可以正确统计该卖家所有记录的实际售卖总量。
执行上述代码后,你会得到符合预期的统计结果,可根据需求切换排序的列名。
内容的提问来源于stack exchange,提问作者U.K.Owen
相关产品推荐
相关产品推荐

