如何在Pandas DataFrame中添加记录每行最大值对应列名的列
获取每行最大值对应的列名(支持多列)
没问题,你需要的是把每行中等于最大值的所有列名收集起来,而不是存储最大值本身,我来给你几个可行的实现方法:
方法一:逻辑直观的apply写法
先算出每行的最大值,再逐行筛选出对应列名并拼接:
# 提前计算每行的最大值 row_max_values = df_1.max(axis=1) # 逐行处理:找出值等于该行最大值的列名,用逗号连接成字符串 df_1['Highest_Rew_patch'] = df_1.apply( lambda row: ','.join(row[row == row_max_values[row.name]].index), axis=1 )
方法二:更简洁的向量化实现
用eq方法生成布尔掩码,直接筛选符合条件的列名:
# 生成布尔DataFrame:标记每行中等于最大值的元素 max_mask = df_1.eq(df_1.max(axis=1), axis=0) # 对每行提取True对应的列名并拼接 df_1['Highest_Rew_patch'] = max_mask.apply( lambda x: ','.join(df_1.columns[x]), axis=1 )
效果验证
拿你给出的第一行数据举例:
Patch_0 0.0, Patch_1 70.0, Patch_2 70.0, ... Patch_7 0.0
处理后Highest_Rew_patch列会得到Patch_1,Patch_2,完全符合你的需求;如果某行只有一个最大值列,就会单独输出该列名。
内容的提问来源于stack exchange,提问作者Kshtj




