如何用Python Pandas通过主键替换DataFrame列值
Pandas 实现DataFrame列值的批量映射替换
针对大规模数据的高效映射需求,推荐使用字典映射+map()方法,这是处理此类场景最快的方式之一,具体步骤如下:
1. 生成映射字典
先将DF2转换为以G1为键、G2为值的字典,利用Pandas的set_index()和to_dict()方法快速生成:
mapping_dict = df2.set_index('G1')['G2'].to_dict()
2. 执行列值替换
直接用map()方法将DF1的COL1列值替换为字典中对应的G2值:
df1['COL1'] = df1['COL1'].map(mapping_dict)
完整代码示例
import pandas as pd # 模拟生成示例数据 df1 = pd.DataFrame({ 'COL1': ['A', 'B', 'A', 'C', 'D'], 'COL2': [10, 20, 30, 40, 50], 'COL3': ['X', 'Y', 'X', 'Z', 'W'] }) df2 = pd.DataFrame({ 'G1': ['A', 'B', 'C', 'D'], 'G2': [1, 2, 3, 4] }) # 生成映射字典 mapping_dict = df2.set_index('G1')['G2'].to_dict() # 替换COL1列值 df1['COL1'] = df1['COL1'].map(mapping_dict) # 查看结果 print(df1)
补充说明
- 效率优势:字典的哈希查找特性让这种方法的时间复杂度为O(n)(n为DF1的行数),远快于合并(merge)类操作,适合处理百万级以上的大规模数据。
- 异常值处理:如果DF1的
COL1中存在DF2未覆盖的取值,映射后会变为NaN。若需要保留原数值,可添加fillna():
df1['COL1'] = df1['COL1'].map(mapping_dict).fillna(df1['COL1'])
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

