如何在df2的column1与df1的column1值匹配时选取df2的column2值?
Pandas 跨DataFrame匹配取值方案
先看示例数据,方便理解操作:
import pandas as pd # 示例df1 df1 = pd.DataFrame({ "column1": ["A", "B", "C", "D"], "other_col": [1, 2, 3, 4] }) # 示例df2 df2 = pd.DataFrame({ "column1": ["B", "C", "E", "F"], "column2": ["x", "y", "z", "w"] })
针对你的需求:匹配df1和df2的column1,取df2的column2值
这里有两种实用方法:
方法1:用merge合并匹配
适合需要保留df1原有列的场景,合并后直接提取目标列:
# 只保留df2的关联列和目标列,避免合并后列名冲突 merge_result = df1.merge(df2[["column1", "column2"]], on="column1", how="left") # merge_result里的column2就是匹配到的df2对应值,未匹配的行显示NaN
how="left"表示保留df1的所有行,要是只想保留两边都匹配到的行,换成how="inner"即可。
方法2:用map映射取值
适合只需要提取目标值的场景,效率更高:
# 把df2的column1和column2转成键值对字典 col2_mapping = df2.set_index("column1")["column2"].to_dict() # 给df1新增一列,填入匹配到的df2 column2值 df1["matched_column2"] = df1["column1"].map(col2_mapping)
通用思路:跨DataFrame列匹配取值
本质就是建立两列的关联映射,核心方法两种:
- 合并法(merge):适合需要保留原表多列的场景,通过
on指定关联列,how控制匹配范围,合并后直接选取目标列。 - 映射法(map/dict):适合仅提取目标值的场景,先将关联列和目标列转成字典(或Series),再用map快速匹配赋值。
注意点
- 如果df2的column1有重复值,merge会生成多行结果,map则会取最后一次出现的对应值,提前处理重复值更稳妥。
- 未匹配到的值默认用NaN填充,可通过
fillna()设置默认值,比如df1["matched_column2"] = df1["column1"].map(col2_mapping).fillna("无匹配")
内容的提问来源于stack exchange,提问作者khayyam didar
相关产品推荐
相关产品推荐

