如何在DataFrame中按日期分组新增当日销量总计汇总行
Pandas 实现按日期追加汇总行方案
你可以通过分组计算汇总值、拼接原表、排序调整三个步骤实现需求,具体实现代码如下:
- 首先导入依赖并构造原始数据集
import pandas as pd # 原始数据 df = pd.DataFrame({ 'Date': ['01/01/08', '01/01/08', '01/01/08', '01/06/08', '01/06/08', '01/06/08'], 'Item': ['Fruit', 'Confectionary', 'Appliance', 'Confectionary', 'Fruit', 'Appliance'], 'Purchased': [48, 42, 11, 16, 19, 50] })
- 按日期分组生成
Overall汇总行
# 按日期聚合计算总销量,固定汇总行的Item值为Overall summary_df = df.groupby('Date', as_index=False).agg( Purchased=('Purchased', 'sum'), Item=('Item', lambda _: 'Overall') ) # 调整列顺序和原表保持一致 summary_df = summary_df[df.columns]
- 拼接原表与汇总表,调整行顺序让汇总行落在对应日期的末尾
# 合并原始数据和汇总数据 final_df = pd.concat([df, summary_df], ignore_index=True) # 增加排序辅助列,保证每个日期下原始商品行在前,Overall行在后 final_df['rank'] = final_df['Item'].map(lambda x: 1 if x == 'Overall' else 0) final_df = final_df.sort_values(by=['Date', 'rank']).drop(columns='rank').reset_index(drop=True)
执行后得到的结果完全符合预期:
Date Item Purchased 0 01/01/08 Fruit 48 1 01/01/08 Confectionary 42 2 01/01/08 Appliance 11 3 01/01/08 Overall 101 4 01/06/08 Confectionary 16 5 01/06/08 Fruit 19 6 01/06/08 Appliance 50 7 01/06/08 Overall 85
注意事项
- 该方法会保留原始数据中每个日期下商品行的原有顺序,不会打乱原始数据排列
- 如果数据量超过10万行,可以把排序逻辑替换为pandas分类类型排序,运行效率会更高
内容的提问来源于stack exchange,提问作者alec22
相关产品推荐
相关产品推荐

