如何基于共同列_a,按Pandas DataFrame映射填充另一DataFrame的_b列?
问题:基于另一DataFrame的列对应关系填充数据
我有两个Pandas DataFrame:df1和df2,二者都包含_a与_b列。其中df1的两列都有数据,示例如下:
import pandas as pd df1 = pd.DataFrame({'_a':[1,3,4,2], '_b':[4,9,3,5]}) df1 _a _b 0 1 4 1 3 9 2 4 3 3 2 5
df2只填充了_a列,且该列的顺序和df1不同,我需要参照df1中_a与_b的对应关系,填充df2的_b列,最终期望结果如下:
_a _b 0 4 3 1 3 9 2 1 4 3 2 5
解决方案
这里有两种简单高效的方法可以实现你的需求:
方法1:使用map()函数(推荐用于简单映射场景)
这种方法先从df1中构建_a到_b的映射字典,再用这个字典给df2的_b列赋值,代码简洁且执行高效。
步骤说明:
- 先对
df1去重,确保每个_a对应唯一的_b值(如果df1中同一个_a有多个_b,可以根据需求选择取第一个、最后一个或聚合值); - 将去重后的
df1转换为{_a值: _b值}的字典; - 用
df2['_a'].map(字典)填充df2['_b']。
代码示例:
import pandas as pd # 定义你的DataFrame df1 = pd.DataFrame({'_a':[1,3,4,2], '_b':[4,9,3,5]}) df2 = pd.DataFrame({'_a':[4,3,1,2]}) # 构建_a到_b的映射字典(这里取每个_a对应的第一个_b值) a_b_mapping = df1.drop_duplicates(subset='_a').set_index('_a')['_b'].to_dict() # 填充df2的_b列 df2['_b'] = df2['_a'].map(a_b_mapping) # 查看结果 print(df2)
方法2:使用merge()函数(适合复杂关联场景)
如果后续需要处理多列关联、保留更多字段或者处理匹配缺失的情况,merge()会更灵活。它通过_a列将两个DataFrame关联,自动填充对应的_b值。
代码示例:
import pandas as pd df1 = pd.DataFrame({'_a':[1,3,4,2], '_b':[4,9,3,5]}) df2 = pd.DataFrame({'_a':[4,3,1,2]}) # 左连接df2和去重后的df1,只保留需要的列 df2 = df2.merge(df1.drop_duplicates(subset='_a'), on='_a', how='left') print(df2)
注意事项:
如果df1中存在同一个_a对应多个不同_b的情况,你需要先明确规则来处理重复值:
- 取第一个出现的值:
df1.groupby('_a')['_b'].first().to_dict() - 取最后一个出现的值:
df1.groupby('_a')['_b'].last().to_dict() - 取均值(数值型字段适用):
df1.groupby('_a')['_b'].mean().to_dict()
内容的提问来源于stack exchange,提问作者victor
相关产品推荐
相关产品推荐

