You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按日期索引与分组对Pandas DataFrame求和的优雅实现方案

按日期索引和客户分组求和的优雅实现方案

这事儿简单!我经常处理这种带重复日期索引的销售数据聚合需求,给你两种直观又优雅的实现方式,按需选择就行:

方法一:用groupby直接聚合(最灵活)

这是Pandas里最常规的分组聚合方式,既能保留层级索引,也能转成普通的平表结构:

步骤1:先构造示例数据(模拟你的场景)

import pandas as pd

data = {
    'quantity': [1, 10, 5, 2, 3],
    'group': [100, 102, 102, 100, 102]
}
# 把日期转成标准DatetimeIndex
dates = pd.to_datetime(['2018-03-22', '2018-03-24', '2018-03-25', '2018-03-25', '2018-03-25'])
df = pd.DataFrame(data, index=dates)

步骤2:核心聚合代码

如果你想要日期+分组作为层级索引的紧凑结果:

# 按日期索引和group字段分组,对quantity求和
summed_df = df.groupby([df.index, 'group'])['quantity'].sum()

输出结果是带MultiIndex的Series,结构清晰:

date        group
2018-03-22  100      1
2018-03-24  102     10
2018-03-25  100      2
            102      8
Name: quantity, dtype: int64

如果想要平表结构(每一行对应一组日期+客户分组的求和结果),只需要加个reset_index:

summed_df = df.groupby([df.index, 'group'])['quantity'].sum().reset_index(name='total_quantity')

最终得到的结构化DataFrame如下:

dategrouptotal_quantity
2018-03-221001
2018-03-2410210
2018-03-251002
2018-03-251028

方法二:用pivot_table生成透视表(更直观)

如果你想直接得到宽表格式(把客户分组作为列,日期作为行),用pivot_table一步到位,非常适合后续做趋势分析或可视化:

summed_df = df.pivot_table(
    index=df.index,  # 行维度:日期索引
    columns='group', # 列维度:客户分组
    values='quantity', # 聚合目标字段:数量
    aggfunc='sum', # 聚合方式:求和
    fill_value=0 # 无记录的日期-分组组合填充0
)

输出的宽表结果如下:

group100102
2018-03-2210
2018-03-24010
2018-03-2528

内容的提问来源于stack exchange,提问作者Newbie2014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:36