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

如何用Pandas在新列中输出与参考列匹配的列名?

问题描述

现有一个包含多列的Pandas DataFrame(示例含a、b、c列,实际有十多列),需为每行新增一列result:

  • 当指定列(如b、c)的值与参考列a的值相等时,在result中填入该列的列名
  • 无匹配项时填充NaN

示例输入DataFrame:

a   b   c
a  0   1   2
b  4   4   5
c  6   7   6
d  9   9  11

期望输出结果:

a   b   c   result
a  0   1   2      NaN 
b  4   4   5        b
c  6   7   6        c
d  9   9  11        b
解决方案

方法一:高效矩阵匹配法

通过布尔矩阵比较+索引提取实现,适合大数据量场景:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'a': [0,4,6,9],
    'b': [1,4,7,9],
    'c': [2,5,6,11]
}, index=['a','b','c','d'])

# 指定需要匹配的目标列(排除参考列a)
target_cols = ['b', 'c']

# 生成布尔矩阵:每行对应目标列与a列的相等判断结果
bool_matrix = df[target_cols].eq(df['a'], axis=0)

# 提取每行第一个匹配的列名,无匹配则设为NaN
df['result'] = bool_matrix.idxmax(axis=1).where(bool_matrix.any(axis=1))

print(df)

方法二:逐行遍历法

逻辑直观易懂,适合小数据量或调试场景:

def get_match_col(row):
    for col in target_cols:
        if row[col] == row['a']:
            return col
    return pd.NA

df['result'] = df.apply(get_match_col, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:35:25