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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:17:21