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

如何根据DataFrame行值匹配另一DataFrame列名并提取列值?

按行匹配列名提取DataFrame数据的解决方法

先修正初始代码的错误

你提供的代码存在两处问题:变量名大小写不匹配、字符串未加引号(会被当作未定义变量),修正后的初始代码如下:

import pandas as pd
import numpy as np

A = {'col1': ['n', 'b'], 'col2': ['c', 'a']}
B = {'a': [1, 24, 30], 'b': [100, np.nan, 10],'c': [np.nan, 4.6, np.nan],'n': [10, 2, 98.2] }
df_a = pd.DataFrame(data=A)
df_b = pd.DataFrame(data=B)

你的代码问题分析

你写的if row['col1'] == df_b.columns.any()逻辑错误:

  • df_b.columns.any()是判断列名中是否存在真值,并非检查元素是否在列名集合中
  • 你提取df_a['col1'].values[:]是拿df_a的数据,完全不符合需求,应该从df_b中取对应列

正确实现代码

使用iterrows()遍历df_a的每一行,用行中col1、col2的值作为列名,从df_b中提取对应列并组合:

# 遍历df_a的每一行
for idx, row in df_a.iterrows():
    # 获取当前行需要匹配的两个列名
    col1 = row['col1']
    col2 = row['col2']
    # 确保列名存在于df_b中(可选判断,避免报错)
    if col1 in df_b.columns and col2 in df_b.columns:
        # 提取对应列生成新DataFrame
        result_df = df_b[[col1, col2]]
        print(f"第{idx+1}次迭代结果:")
        print(result_df)
        print("-" * 30)

运行结果示例

以你提供的需求为例,若df_a第一行col2值为b,则第一次迭代输出:

第1次迭代结果:
      n      b
0   10.0  100.0
1    2.0    NaN
2   98.2   10.0
------------------------------

内容的提问来源于stack exchange,提问作者Viky E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:24:38