如何根据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.
相关产品推荐
相关产品推荐

