如何用原ID对应新ID列表的字典更新Pandas DataFrame并拆分行
Pandas 字典映射ID拆行实现
实现思路非常直接:先把原DataFrame的ID列按照给定字典替换为对应的列表,再用pandas内置的explode方法把列表拆成独立行,整个过程会自动保留其余列的所有信息。
前置测试数据
先构造匹配场景的测试环境:
import pandas as pd # 原始DataFrame df = pd.DataFrame({ "ID": [1, 2, 7, 8], "Name": ["Peter", "John", "Rene", "Dilan"], "Last Name": ["Smith", "Allen", "Watson", "Foster"] }) # 映射字典 id_map = {1: [3, 4], 2: [5, 6], 7: [11], 8:[8]}
两步核心操作
- 第一步:将ID列的原始值替换为字典中对应的列表
执行后ID列会变为存储列表的序列:df["ID"] = df["ID"].map(id_map)[[3,4], [5,6], [11], [8]] - 第二步:对ID列执行炸开操作
传入result_df = df.explode("ID", ignore_index=True)ignore_index=True会自动重置结果表的行索引,避免拆分后出现重复索引。
结果验证
执行完成后得到的结果完全匹配预期输出:
| ID | Name | Last Name |
|---|---|---|
| 3 | Peter | Smith |
| 4 | Peter | Smith |
| 5 | John | Allen |
| 6 | John | Allen |
| 11 | Rene | Watson |
| 8 | Dilan | Foster |
兼容适配:如果存在未被字典收录的原ID,可将map逻辑调整为
df["ID"].map(lambda x: id_map.get(x, [x])),未匹配的ID会默认保留原值,不会触发空值报错。
内容的提问来源于stack exchange,提问作者Isaac Figueroa
相关产品推荐
相关产品推荐

