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

如何匹配双DataFrame条件并提取值填充至Result列

解决方案

你的代码问题点

  • 仅检查了df2第一行的number值(df2.loc[0, 'number']),未匹配所有行的number
  • 逻辑中未正确提取df2里对应ID列与匹配number行的目标值
  • 使用iterrows()效率偏低,pandas提供了更简洁的向量化操作方案

方法一:重塑df2结构后合并(推荐,高效)

先把df2转为"长格式",让ID作为独立列,便于和df1直接匹配:

import pandas as pd

# 初始化示例数据
df1 = pd.DataFrame({
    'ID': [13256, 15556, 14556],
    'number': [99, 100, 100],
    'Result': [pd.NA, pd.NA, pd.NA]
})

df2 = pd.DataFrame({
    13256: [12,10,11],
    15556: [1,2,3],
    14556: [4,5,6],
    'number': [99,100,101]
})

# 重塑df2:将原ID列转为行数据
df2_melted = df2.melt(id_vars='number', var_name='ID', value_name='Result')

# 合并两个DataFrame,保留df1原始结构
df1 = df1.merge(df2_melted, on=['ID', 'number'], how='left')
print(df1)

运行结果:

ID  number  Result
0  13256      99      12
1  15556     100       2
2  14556     100       5

方法二:apply逐行匹配(适合小数据集)

如果不想修改df2结构,可通过apply逐行处理df1:

def fill_result(row):
    # 筛选df2中number匹配的行
    match_row = df2[df2['number'] == row['number']]
    if not match_row.empty and row['ID'] in df2.columns:
        return match_row[row['ID']].values[0]
    return pd.NA

df1['Result'] = df1.apply(fill_result, axis=1)
print(df1)

该方法会针对df1每一行,先找到df2中number相等的行,再提取对应ID列的值。

内容的提问来源于stack exchange,提问作者complog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:57:50