如何基于另一DataFrame替换指定列值并保留原DataFrame其余数据
pandas实现按匹配列替换指定字段值
方法一:使用map + fillna
这种方法简洁高效,适合小数据集:
- 将df2转换为以
name为键、value为值的字典 - 用df1的
name列映射该字典,得到替换后的临时列 - 用
fillna保留原df1中未匹配到的value值
import pandas as pd # 创建df1 df1 = pd.DataFrame({ 'country': ['romania', 'russia', 'sua', 'china'], 'name': ['john', 'emma', 'mark', 'jack'], 'value': [100, 200, 300, 400] }) # 创建df2 df2 = pd.DataFrame({ 'name': ['emma', 'mark'], 'value': [2, 3] }) # 转换为字典 value_map = df2.set_index('name')['value'].to_dict() # 替换并保留原未匹配值 df1['value'] = df1['name'].map(value_map).fillna(df1['value']).astype(int) print(df1)
输出结果:
country name value 0 romania john 100 1 russia emma 2 2 sua mark 3 3 china jack 400
方法二:使用merge合并填充
适合需要保留更多中间信息的场景:
- 将df1与df2按
name左连接 - 用df2的
value列填充空值,得到新的value列 - 清理多余列并调整列顺序
import pandas as pd # 创建数据框 df1 = pd.DataFrame({ 'country': ['romania', 'russia', 'sua', 'china'], 'name': ['john', 'emma', 'mark', 'jack'], 'value': [100, 200, 300, 400] }) df2 = pd.DataFrame({ 'name': ['emma', 'mark'], 'value': [2, 3] }) # 左连接,添加后缀区分两个value列 merged_df = df1.merge(df2, on='name', how='left', suffixes=('_original', '_new')) # 用新值替换,无匹配则保留原值 merged_df['value'] = merged_df['value_new'].fillna(merged_df['value_original']).astype(int) # 清理多余列 df3 = merged_df[['country', 'name', 'value']] print(df3)
输出结果与方法一一致。
内容的提问来源于stack exchange,提问作者Marius Constandache
相关产品推荐
相关产品推荐

