如何提取pandas DataFrame每行前两大值对应的列名并新增存储列
实现代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'AA': [1, 5, 9], 'BB': [12, 7, 7], 'CC': [4, 28, 9], 'DD': [3, 7, 2], 'EE': [5, 4, 6] }) # 定义行处理逻辑:取每行前两大值对应的所有列名 def fetch_top2_cols(row): # 取当前行去重后的数值,降序排序取前2个作为阈值 top2_unique_values = sorted(row.unique(), reverse=True)[:2] # 筛选所有值属于前两大阈值的列名,默认按原列顺序返回 return [col for col, val in row.items() if val in top2_unique_values] # 应用函数到每行,生成MM列 df['MM'] = df.apply(fetch_top2_cols, axis=1) # 输出结果验证 print(df)
逻辑说明
核心逻辑是对每行做单独处理:
- 先提取当前行的所有数值,去重后从大到小排序,取前2个值作为入选阈值
- 遍历当前行的所有列,只要列值属于这两个阈值,就将列名加入结果列表
- 列表默认保持原DataFrame的列顺序,如果需要调整同值列的排序规则,可以在返回列表前增加自定义排序逻辑即可。
内容的提问来源于stack exchange,提问作者user3344308
相关产品推荐
相关产品推荐

