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

Pandas按id补全所有日期行并填充正确累计求和值的实现方法

pandas实现按id补全日期并填充累计值的方案

实现逻辑

  • 首先计算全局最大天数,生成每个id覆盖0到最大天数的全量行
  • 原数据按id、天数排序保证时间顺序正确
  • 全量行和原数据左连接后,按id分组做缺失值填充:先向前复用最近的累计值,剩余开头的缺失值(早于id首个记录的天数)统一填0

完整代码

import pandas as pd

# 构造示例数据
data = {'id': [0, 0, 0, 1, 1, 2, 1], 'day' : [0, 2, 1, 1, 4, 2, 2], 'running_sum': [1,4,2,1,6,6,3]}
df_1 = pd.DataFrame(data)

# 1. 计算全局最大天数
max_day = df_1['day'].max()

# 2. 生成每个id对应0到max_day的全量天数组合
full_idx = pd.MultiIndex.from_product(
    [df_1['id'].unique(), range(max_day + 1)],
    names=['id', 'day']
)
full_df = pd.DataFrame(index=full_idx).reset_index()

# 3. 原数据按id、day排序保证时间顺序
df_sorted = df_1.sort_values(['id', 'day']).reset_index(drop=True)

# 4. 全量表和原表左连接
df_merged = pd.merge(full_df, df_sorted, on=['id', 'day'], how='left')

# 5. 按id分组填充缺失值
df_merged['running_sum'] = df_merged.groupby('id')['running_sum'].ffill().fillna(0).astype(int)

# 输出结果
print(df_merged)

结果验证

运行上述代码后得到的df_merged和你要求的输出格式完全一致,每个id的缺失天数都会按规则填充对应累计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:45:01