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

如何在Pandas中匹配多列并将匹配值转为单个新列?

实现方法拆解

嘿,这个需求其实挺常见的,我给你分享几种实用的Pandas实现方式,你可以根据自己的习惯选:

方法1:用apply遍历行找匹配值

这种方式比较直观,针对每一行遍历目标列,提取出等于'21'的值:

# 先定义目标列(你这里是col2、col3、col4)
target_cols = ['col2', 'col3', 'col4']

# 新增matched_value列,提取匹配到的21
df1['matched_value'] = df1[target_cols].apply(
    lambda row: next((val for val in row if val == '21'), None), 
    axis=1
)

因为你已经提前筛选出了包含'21'的行,所以next总能找到值,不会返回None,放心用就行。

方法2:用mask+填充函数快速提取

这种方法更高效,适合数据量较大的情况:

df1['matched_value'] = df1[target_cols].mask(df1[target_cols] != '21').bfill(axis=1).iloc[:, 0]

原理是:先用mask把所有不等于'21'的单元格转为NaN,然后用bfill(axis=1)按行从右往左填充NaN(也可以用ffill(axis=1)从左往右),最后取每一行的第一个有效值,就是我们要的'21'。

方法3:链式np.where判断(适合列数少的场景)

如果你的目标列只有3列,用这种方式可读性很高:

import numpy as np

df1['matched_value'] = np.where(df1['col2'] == '21', df1['col2'],
                               np.where(df1['col3'] == '21', df1['col3'],
                                        df1['col4']))

逻辑很简单:先判断col2是不是21,是就取col2的值;不是就判断col3,以此类推,最后取到匹配的那个值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:20:58