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

