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

如何在DataFrame多列中查找特定值并汇总生成新的color列

问题解决实现方案

你原有代码存在两个明显问题:一是循环逻辑完全冗余,query直接返回所有符合条件的行索引,不需要逐行遍历;二是insert方法调用参数错误,insert是列级插入操作,你需要的是给对应行赋值而非插入新列。

以下是可直接运行的实现方案:
首先构造测试数据用于复现:

import pandas as pd
import numpy as np

data = {
    'yellow_col': ['yellow', 'none', 'none'],
    'green_col': ['none', 'green', 'none'],
    'red_col': ['none', 'none', 'red'],
    'blue_col': ['none', 'none', 'none']
}
df = pd.DataFrame(data)

方法1:逐行匹配(逻辑直观,适合小数据集)

直接筛选每行非none的值赋值给color列:

df['color'] = df.apply(lambda row: row[row != 'none'].iloc[0], axis=1)

方法2:替换空值批量提取(写法最简洁)

先将字符串none替换为空值,再按行提取第一个有效值:

df['color'] = df.replace('none', np.nan).bfill(axis=1).iloc[:, 0]

方法3:向量化操作(效率更高,适合百万级以上大数据集)

利用列名和颜色值的对应关系做匹配,避免逐行遍历开销:

color_map = {
    'yellow_col': 'yellow',
    'green_col': 'green',
    'red_col': 'red',
    'blue_col': 'blue'
}
df['color'] = df.eq(pd.Series(color_map)).idxmax(axis=1).map(color_map)

三种方法运行后都可得到预期输出:

yellow_col green_col red_col blue_col   color
0     yellow      none    none     none  yellow
1       none     green    none     none   green
2       none      none     red     none     red

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:36:00