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

