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

