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

如何按指定规则逐步合并多个月度进度Pandas DataFrame?

实现月度Pandas DataFrame按规则合并的方法

以下是完全符合要求的可运行实现代码:

import pandas as pd

# 示例数据初始化(用户提供的原始数据)
data_22_3 = {
    'id_number': ['A123', 'B456', 'C789'],
    'company': ['Insurance1', 'Insurance2', 'Insurance3'],
    'type': ['A', 'A', 'C'],
    'Income': [100, 200, 300]
}
df_22_3 = pd.DataFrame(data_22_3)

data_22_4 = {
    'id_number': ['A123', 'B456', 'D012'],
    'company': ['Insurance1', 'Insurance2', 'Insurance1'],
    'type': ['A', 'B', 'B'],
    'Income': [150, 250, 400]
}
df_22_4 = pd.DataFrame(data_22_4)

data_22_5 = {
    'id_number': ['A123', 'C789', 'E034'],
    'company': ['Insurance1', 'Insurance3', 'Insurance5'],
    'type': ['A', 'C', 'B'],
    'Income': [180, 320, 500]
}
df_22_5 = pd.DataFrame(data_22_5)

# 合并逻辑实现
def merge_monthly_dfs(main_df, *monthly_dfs):
    # 初始化合并表,以第一个DataFrame为基础
    merged_df = main_df.copy()
    # 遍历后续月度数据,从第2个开始给Income列编号
    for idx, df in enumerate(monthly_dfs, start=2):
        # 提取当前月度的id和Income,重命名Income列
        monthly_income = df[['id_number', 'Income']].rename(columns={'Income': f'Income_{idx}'})
        # 左连接,保留主表所有原有行
        merged_df = merged_df.merge(monthly_income, on='id_number', how='left')
        # 新加入的id,主表原始Income列填充0
        merged_df['Income'] = merged_df['Income'].fillna(0)
        # 新id的company、type列用当前月度数据填充(主表无对应记录)
        for col in ['company', 'type']:
            merged_df[col] = merged_df[col].fillna(df.set_index('id_number')[col])
        # 未在当前月度出现的id,对应月度Income列填充0
        merged_df[f'Income_{idx}'] = merged_df[f'Income_{idx}'].fillna(0)
    # 重置索引保证连续性
    merged_df = merged_df.reset_index(drop=True)
    return merged_df

# 执行合并
all_df = merge_monthly_dfs(df_22_3, df_22_4, df_22_5)
print(all_df)

核心逻辑说明

  • 主表优先原则:始终以第一个DataFrame的company、type等非Income列值为准,仅填充新id的缺失字段
  • 月度Income列命名:后续每个DataFrame的Income列自动命名为Income_2、Income_3...
  • 缺失值处理:
    • 主表已有id:仅补充对应月度Income,其他字段不覆盖
    • 主表无id:自动添加该行,主表原始Income填0,其他字段取当前月度数据
    • 未在当前月度出现的id:对应月度Income填0

运行代码后将得到完全符合你期望的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:49:52