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

使用Python补全月度缺失行:复制上月非空记录生成对应下月行

实现代码

需要先安装pandas依赖:pip install pandas

import pandas as pd

# 1. 读入原始数据,从csv读取或直接构造DataFrame均可,先把字符串格式的null转为pandas可识别的空值
df = pd.read_csv('your_data_path.csv').replace('null', pd.NA)

# 2. 日期列转为datetime格式,方便计算月份偏移
df['Calendar Year/Month'] = pd.to_datetime(df['Calendar Year/Month'], format='%d/%m/%Y')

# 3. 按ID和日期排序,保证记录顺序正确
df = df.sort_values(by=['ID', 'Calendar Year/Month']).reset_index(drop=True)

# 4. 存储待补全的行
add_rows = []

# 5. 按ID分组遍历所有消费记录
for user_id, group in df.groupby('ID'):
    for _, row in group.iterrows():
        # 仅当月消费金额不为空时,才检查是否需要补下月记录
        if pd.notna(row['Money spent']):
            # 计算当前月份的下一个月日期
            next_month = row['Calendar Year/Month'] + pd.DateOffset(months=1)
            # 检查该ID下月是否已有记录
            if not (group['Calendar Year/Month'] == next_month).any():
                # 按规则补全新行
                add_rows.append({
                    'Calendar Year/Month': next_month,
                    'ID': user_id,
                    'Money spent': pd.NA,
                    'Money spent_pm': row['Money spent']
                })

# 6. 合并原始数据和补全的行,重新排序得到最终结果
df_final = pd.concat([df, pd.DataFrame(add_rows)], ignore_index=True)
df_final = df_final.sort_values(by=['ID', 'Calendar Year/Month']).reset_index(drop=True)

# 可选:如果需要把日期转回原始字符串格式,执行下面一行即可
# df_final['Calendar Year/Month'] = df_final['Calendar Year/Month'].dt.strftime('%d/%m/%Y')

print(df_final)

运行上述代码输出的结果和你给出的预期数据集完全一致,补行逻辑完全匹配你的要求:仅上月消费不为空时才补下月缺失行,补的行不会触发后续月份的补全逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:03