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

Pandas遍历DataFrame新增列存储每行指定列最大值对应列名

原有代码的错误原因
  • 第一版循环代码:循环全程没有用到遍历索引i,每次循环都是给整列emotion赋值,且赋值内容是四个情绪列按列计算的全局最大值(返回长度为4的Series),和原DataFrame行数不匹配,最终整列被填充为NaN。
  • 第二版iloc代码:iloc[3:]是截取从第4行开始的所有行数据,根本不是选中目标列,行列索引方向完全写反,同样是每次给整列重复赋值,逻辑不成立。
正确实现方案

不需要写低效的逐行循环,直接用pandas原生的逐行计算方法即可,运行效率远高于手写循环:

# 定义需要比对的情绪列列表
emotion_columns = ['neutral', 'happy', 'sad', 'angry']
# axis=1 指定按行维度计算,idxmax 直接返回每行最大值对应的列名
df3['emotion'] = df3[emotion_columns].idxmax(axis=1)

运行后你给出的两行示例数据,emotion列都会被正确标注为neutral,完全符合需求。

特殊场景提示:如果某一行存在多个情绪列数值相等且同为最大值的情况,idxmax会默认返回排在列列表最靠前的列名,如果你需要处理并列最大值的场景,可以基于这个逻辑再补充自定义判断规则,常规无并列的场景下上述代码可以直接使用。

内容的提问来源于stack exchange,提问作者Zoi K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:18:20