You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于共同列_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:04:13