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

如何根据Column A的值匹配对应_Input列设置DataFrame的Column B值?

解决思路

示例数据

先还原你的示例DataFrame:

import pandas as pd

columns = ["Value A_Input",  "Value B_Input", "Value C_Input", "Column A", "Column B"]
raw_data = [
    ["aaa", "ddd", "ggg", "Value A", "aaa"],
    ["bbb", "eee", "hhh", "Value C", "hhh"],
    ["ccc", "fff", "iii", "Value B", "fff"],
]
df = pd.DataFrame(raw_data, columns=columns)

需求说明

根据Column A的每行值拼接_Input得到目标列名,将该列对应的值赋值给Column B。

你的代码问题

你写的代码存在两个核心问题:

  1. str([x for x in df['Column A']])会把整个Column A的所有值转成一个字符串列表,不是逐行处理单个值,无法匹配每行对应的列。
  2. 语法错误:代码末尾多了一个右括号),导致运行报错。

正确解法

方法1:用apply逐行处理(简单直观)

df['Column B'] = df.apply(lambda row: row[row['Column A'] + '_Input'], axis=1)

逐行遍历DataFrame,每行中通过row['Column A'] + '_Input'拼接得到目标列名,再取出该列的值赋值给Column B。

方法2:用lookup(性能更优)

如果你的Pandas版本在1.5.0及以上,推荐用lookup方法,它比apply效率更高,专门处理这种按行匹配列的场景:

df['Column B'] = df.lookup(df.index, df['Column A'] + '_Input')

lookup接收行索引数组和列名数组,直接定位到每个单元格的值,批量完成赋值。

方法3:用melt+merge(适合复杂场景)

如果数据量较大或者需要更灵活的关联逻辑,可以先将输入列转成长格式再合并:

# 筛选所有以_Input结尾的列
input_cols = [col for col in df.columns if col.endswith('_Input')]
# 将输入列转成长格式
melted_df = df.melt(
    id_vars=['Column A'],
    value_vars=input_cols,
    var_name='Input_Column',
    value_name='Target_Value'
)
# 生成匹配列:去掉_Input后缀,和Column A对应
melted_df['Match_Key'] = melted_df['Input_Column'].str.replace('_Input', '')
# 只保留匹配成功的行
matched = melted_df[melted_df['Match_Key'] == melted_df['Column A']]
# 合并回原DataFrame并赋值
df['Column B'] = matched['Target_Value'].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:13