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

如何在Pandas DataFrame中提取每行前两大数值对应的列名?

获取Pandas DataFrame每行最大/第二大值对应的列名

方法1:用apply结合nlargest(直观易读)

直接对每行提取前2大值对应的列名,再拆分到新列:

import pandas as pd

df = pd.DataFrame({'A': [1, 5, 10], 'B': [2, 6, 11], 'C': [3, 7, 12], 'D': [4, 8, 13], 'E': [5, 9, 14]})

# 每行取前2大值的列名,返回包含列表的Series
top2_cols = df.apply(lambda x: x.nlargest(2).index.tolist(), axis=1)

# 拆分列表到新增列
df['max_col'] = top2_cols.str[0]
df['second_max_col'] = top2_cols.str[1]

运行后结果:

A   B   C   D   E max_col second_max_col
0   1   2   3   4   5       E              D
1   5   6   7   8   9       E              D
2  10  11  12  13  14       E              D

方法2:矢量化操作(大数据集更高效)

避免循环,用矢量化方法处理:

# 直接获取每行最大值的列名
df['max_col'] = df.idxmax(axis=1)

# 生成临时DF,把每行最大值的位置设为NaN,再找剩余值的最大值列名
temp_df = df.mask(df.eq(df.max(axis=1), axis=0))
df['second_max_col'] = temp_df.idxmax(axis=1)

注意:如果某行存在多个相同的最大值(比如A和B数值相同且都是该行最大),idxmax会返回先出现的列名,临时DF会把所有最大值位置设为NaN,确保第二大值取的是剩余列里的最大值对应的列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:31