如何获取DataFrame每行最大值对应的所有列名列表
实现方法
核心逻辑是逐行匹配所有等于该行最大值的单元格,收集对应的列名生成列表即可,代码可直接运行:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'a':[12,34,98,26],'b':[12,87,98,12],'c':[11,23,43,1]}) # 计算每行最大值对应列名的列表 result = df.eq(df.max(axis=1), axis=0).apply(lambda x: df.columns[x].tolist(), axis=1)
代码逻辑说明
df.max(axis=1):按行维度计算每一行的最大值,返回行索引对齐的Seriesdf.eq(对比对象, axis=0):将原DataFrame中每个单元格和对应行的最大值做相等判断,返回同形状的布尔DataFrame,值等于行最大值的位置标记为True,其余为Falseapply(..., axis=1):逐行遍历布尔判断结果,提取值为True位置对应的列名,转换为列表格式
运行后得到的result输出和需求完全一致:
0 [a, b] 1 [b] 2 [a, b] 3 [a] dtype: object
如果需要得到标准DataFrame格式,只需要对结果做一层转换即可:
new_df = result.to_frame(name='max_cols')
内容的提问来源于stack exchange,提问作者User1917931829
相关产品推荐
相关产品推荐

