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

Pandas按分组累加交易金额并补全缺失日期填充历史值的实现方法

解决方法

你已经完成的分组求和和累加计算逻辑是正确的,补全缺失日期可以通过pandas内置的日期序列生成+重索引+前向填充功能实现,无需手动循环,执行效率很高。

完整实现代码

import pandas as pd

# 你已完成的第一步:按id+交易日聚合求和并计算累计值
df_agg = df_joined.groupby(['id', 'tradedate'])['amt'].agg('sum').reset_index()
df_agg['amt'] = df_agg.groupby('id').amt.cumsum()

# 第二步:将交易日转为datetime类型,方便生成连续日期序列
df_agg['tradedate'] = pd.to_datetime(df_agg['tradedate'], format='%Y%m%d')

# 第三步:按id分组补全缺失日期,前向填充累计值
df_result = (
    df_agg.set_index('tradedate')
    .groupby('id', group_keys=False)
    # 对每个id生成从首个交易日到最后一个交易日的完整日度序列
    .apply(lambda x: x.reindex(pd.date_range(x.index.min(), x.index.max(), freq='D')))
    .drop('id', axis=1)
    .reset_index(names=['tradedate', 'id'])
    .sort_values(['id', 'tradedate'])
    .ffill() # 缺失日期的amt自动填充为上一个交易日的累计值
)

# 可选:如果需要将日期转回YYYYMMDD格式的整数
df_result['tradedate'] = df_result['tradedate'].dt.strftime('%Y%m%d').astype(int)

核心逻辑说明

  • 转换日期格式是为了直接调用pandas内置的日期序列生成能力,无需手动计算区间内的缺失日期
  • 分组后重索引的操作是向量化执行,性能远高于手写循环补全日期
  • ffill()前向填充正好匹配需求:缺失日期的累计值和上一个交易日保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:06:04