基于DataFrame两列最大值生成对应列名新列的实现方法
实现方案
可以直接用Pandas自带的idxmax方法完成需求,该方法会返回指定轴上最大值对应的索引名,按行计算时就能直接得到最大值对应的列名。
完整代码示例
首先构造测试用DataFrame:
import pandas as pd df = pd.DataFrame([ ['A', 1, 0], ['B', 2, 3], ['C', 0, 4], ['D', 3, 2] ], columns=['Col1', 'Val1', 'Val2'])
新增Type列的核心代码:
# axis=1表示按行计算,仅针对Val1、Val2两列做判断 df['Type'] = df[['Val1', 'Val2']].idxmax(axis=1)
特殊场景处理
如果存在Val1和Val2数值相等的情况,idxmax默认会取排序在前的列(也就是Val1)。如果需要自定义相等时的返回值,可以用numpy.where实现自定义逻辑:
import numpy as np # 示例:相等时返回Val2的写法 df['Type'] = np.where(df['Val1'] > df['Val2'], 'Val1', np.where(df['Val1'] < df['Val2'], 'Val2', 'Val2'))
执行后得到的DataFrame和你需要的输出结果完全一致。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

