Pandas 中实现多数据框的“纵向去重合并 + 横向收入列追加”操作
本文介绍如何对多个按月采集的客户数据框(含 id_number、company、type 和 income)进行两阶段整合:先基于 id_number 去重构建主表结构,再逐月将 income 映射为 income_1/income_2/income_3 等列,缺失值补 0。
本文介绍如何对多个按月采集的客户数据框(含 id_number、company、type 和 income)进行两阶段整合:先基于 id_number 去重构建主表结构,再逐月将 income 映射为 income_1/income_2/income_3 等列,缺失值补 0。
在实际业务场景中(如保险客户月度收入追踪),我们常需将多个时间切片的同构数据框(如 df_22_3、df_22_4、df_22_5)融合为一张宽表,其中:
- 行维度以 id_number 为唯一标识,覆盖所有出现过的客户;
- 列维度保留首张表的非 Income 字段(company、type),并为每月 Income 新增独立列(如 Income_1、Income_2、Income_3);
- 若某客户在某月无记录,则对应 Income_X 填 0;若字段(如 company)在不同月份存在差异,以首次出现的值为准(即按 id_number 首次出现顺序保留)。
该需求无法通过单一 merge 或 concat 完成,需分步处理:
✅ 第一步:构建统一主键骨架(去重保序)
使用 pd.concat() 合并所有 DataFrame,但提前剔除 Income 列,再按 id_number 去重。此操作确保最终行顺序由 id_number 首次出现位置决定,且 company/type 取最早有效值:
dfs = [df_22_3, df_22_4, df_22_5]
result = (
pd.concat([df.drop(columns='Income') for df in dfs])
.drop_duplicates('id_number')
.reset_index(drop=True)
)
⚠️ 注意:必须用列表推导式 df.drop(columns='Income') 预先移除每张表的 Income,否则 concat 会保留所有 Income 列导致结构混乱。
✅ 第二步:逐月映射 Income 到新列(精准对齐 + 缺失填充)
对每个原始 DataFrame,利用 set_index('id_number')['Income'] 构造 Series,再通过 .reindex() 将其按 result['id_number'] 顺序对齐,并指定 fill_value=0 处理未匹配项:
会译·对照式翻译
会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译
for i, df in enumerate(dfs, start=1):
result[f'Income_{i}'] = (
df.set_index('id_number')['Income']
.reindex(result['id_number'], fill_value=0)
.values # .values 确保返回 numpy array,避免索引对齐副作用
)
? 关键点:.reindex(..., fill_value=0) 是核心——它不依赖索引交集,而是严格按目标索引序列(result['id_number'])查找值,找不到则填 0,完美满足“新客户 Income_X=值,老客户 Income_X=0”的逻辑。
✅ 第三步:列名标准化(可选)
若需将 Income_1 还原为 Income(保持首月语义),执行重命名:
result = result.rename(columns={'Income_1': 'Income'})
最终结果与预期完全一致:
| id_number | company | type | Income | Income_2 | Income_3 |
|---|---|---|---|---|---|
| A123 | Insurance1 | A | 100 | 150 | 180 |
| B456 | Insurance2 | A | 200 | 250 | 0 |
| C789 | Insurance3 | C | 300 | 0 | 320 |
| D012 | Insurance1 | B | 0 | 400 | 0 |
| E034 | Insurance5 | B | 0 | 0 | 500 |
✅ 总结:该方案兼顾正确性与可扩展性——新增月份只需追加到 dfs 列表,循环自动处理;逻辑清晰分离“结构构建”与“数值填充”,避免复杂嵌套 merge,是处理时序宽表聚合的推荐范式。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
索尼松口:2028年前发售的PS游戏未来仍可追加印盘
2026-07-07PlayStation发布了最新公告,告知发行商在2028年1月之后仍然可以为现有实体版游戏追加生产光盘。对于玩家来说,这一新消息或许能带来一些安慰,因为他们仍然有时间购买和收藏已发售游戏的实体光盘。 PlayStation告知合作伙伴:2028年前推出的游戏未来仍可追加印制实体光盘 根据Game File最新报道,索尼向游戏发行商发送了一则合作伙伴通知,表示他们“仍然可以继续为现有的PlaySt...
《超级弹丸论破2×2》延期至2027年初 追加新剧本
2026-07-07SpikeChunsoft宣布,《弹丸论破》15周年纪念新作《超级弹丸论破2×2》延期至2027年初发售,登陆Switch2、Switch、PlayStation5、XboxSeriesX|S及Steam平台。 《超级弹丸论破2×2》原计划今年年内发售,是系列久坐重置加上新内容追加的增强版本,包括两大主要内容:其一为系列第二作《超级弹丸论破2再见绝望学园》的完全重制版;其二则为基于原版舞台和角色开...
《漫威刀锋战士》原有望2027年发售 Xbox不愿追加资金
2026-07-07由Xbox、贝塞斯达与Arkane工作室联手打造的动作冒险游戏《漫威刀锋战士》,预计2027年即可达到发售标准,但Xbox方面似乎不愿继续投入资金推进后续开发。 在最新一期《Giant Bombcast》播客节目中,联合主持人、业内人士杰夫·格拉布谈及Xbox当前的“战略重置”,其中包括成本削减举措、旗下工作室前景不明,以及多家第一方工作室或面临关停的传闻。关于《漫威刀锋战士》,他表示该游戏开发完...
《马里奥赛车:世界》1.7更新 追加生存地图新路线
2026-07-037月1日今天,任天堂宣布,《马里奥赛车:世界》发布最新1.7更新,追加生存地图新路线两条以及修复调整问题等。 本次更新中,生存玩法追加了两条新路线“钻孔拉力赛”和“飞镖拉力赛”。钻孔拉力赛是从瓦里奥船连接酷霸王城堡的路线,飞镖拉力赛是从索尔蒂城连接舒波卡特的路线。新路线可以通过清除一个以上的生存拉力赛来选择。据说生存的路线,今后也依次更新追加预定。 此外,在用姿势菜单的“照相机”拍摄时,安装了贴上...
《苍翼默示录:神观之梦》时隔9年更新 追加新角色参战
2026-06-27ArcSystemWorks日前宣布,旗下经典2D对战格斗游戏《苍翼默示录:神观之梦》时隔9年即将发布最新更新,追加新角色参战,详细情报稍后公开,敬请期待。 本作于2015年街机版开始运行,2016年面向PS4/PS3发售。另外,现在也登陆了Steam以及NintendoSwitch。本作是ArkSystemWorks引以为豪的人气系列《BLAZBLUE》系列的最终章定位作品,在冒险部分/格斗游戏...
拳头反作弊Vanguard追加新功能 可设置只在游戏时启动
2026-06-27RiotGames于6月25日宣布,旗下反作弊软件Vanguard追加新功能“按需模式”,满足一定条件后,该软件可以设定为不启动游戏时不会启动。 ·Vanguard是RiotGames独自开发的反作弊软件。作为该公司发布的《无畏契约》、《英雄联盟》、《2XKO》PC版的作弊对策,在游戏安装时同时安装,Vanguard会在游戏启动以外也继续动作。 作为Vanguard的更新,追加了新的可选功能。该功...
SE《欺杀旅社》更新发布 新角色参战新人BUFF追加
2026-06-27SE负责联合制作并发行,旗下心理推理博弈游戏《欺杀旅社》最新更新ver.0.9.4上线,主要追加新角色刺客与跑者,另外针对新人玩家附赠新人BUFF,变得更加难以被击败。 《欺杀旅社》:Steam地址 《欺杀旅社》是一款快节奏、非对称PvP射击游戏,玩家需要通过战斗消灭杀手(恶狼)——无需进行讨论,没有投票环节!选择适合的武器、能力,以及配置,搜集证据、揪出恶狼,以武力使其屈服! 在补丁ver.9....
《苍蓝雷霆》三部曲10月22日登陆Switch 2追加新内容完全版
2026-06-24IntiCreates社6月24日今天宣布,旗下经典名作《苍蓝雷霆:刚巴尔特》三部曲将于10月22日登陆Switch2,除了完整的原作内容外,还将追加原创新内容,敬请期待。 ·《苍蓝雷霆》三部曲完全版收录了《苍蓝雷霆》、《苍蓝雷霆:爪》《苍蓝雷霆:锁环》三部经典游戏,另外追加了《白色钢铁X2》的追加阿修罗于系列主角刚巴尔特共同作战冒险的新剧本《苍蓝雷霆:刚巴尔特GX》。
Switch固件更新22.5上线 追加新语言支持修复问题
2026-06-18任天堂今天宣布,Switch固件更新22.5.0上线追加新语言支持修复问题,一起来了解下。 系统更新22.5.0(2026年6月16日发布): 在“设置”中进行了以下操作。 在“无障碍功能”→“语音朗读”中,现已支持荷兰语和俄语的语音朗读。 在“无障碍性”→“游戏聊天的语音⇔文字转换”中,已将荷兰语和俄语添加到“文字⇒语音转换”的语言中。 我们修正了一些问题,并提高了运行稳定性。
《最终幻想战略版》最新更新上线 星座相性新要素追加
2026-06-18SE《最终幻想战略版:伊瓦利斯编年史》最新更新v1.5.0上线,曾经的废案星座相性等新要素追加,一起来了解下。 此次更新主要是在“增强”模式中追加了要素。追加了《最终幻想》系列等作品中常见的“更强新游戏”功能。如果游戏通关后有存档数据,从标题画面选择“更强新游戏”后,即可保留角色等级和装备,从头开始游玩主线剧情。 此外,还新增了“星座相性”确认功能。在单位状态画面中,可以查看单位的星座以及星座之间...
