如何在Pandas中获取每行最大值及其之前列的最小值?
Pandas实现每行最大值及最大值列之前所有列的最小值
输入DataFrame:
ab bc cd ef eh ij 0 1 2 12 4 6 7 1 4 5 6 1 10 4 2 5 6 9 1 2 4 3 12 1 3 1 2 4
预期输出:
ab bc cd ef eh ij Max MinBefore 0 1 2 12 4 6 7 12 1.0 1 4 5 6 1 10 4 10 1.0 2 5 6 9 1 2 4 9 5.0 3 12 1 3 1 2 4 12 12.0
你的尝试代码存在几个明显问题:
- 原DataFrame仅包含6列,代码中使用
iloc[:,13:...]的索引范围完全错误 - 需求是计算最小值,但代码误用了
idxmax(该方法返回最大值对应的列名) - 未正确关联每行最大值所在的列索引,逻辑无法匹配需求
正确实现步骤
- 计算每行的最大值,新增
Max列 - 获取每行最大值对应的列索引位置
- 对每行截取最大值列之前的所有列,计算最小值并新增
MinBefore列
完整代码
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'ab': [1,4,5,12], 'bc': [2,5,6,1], 'cd': [12,6,9,3], 'ef': [4,1,1,1], 'eh': [6,10,2,2], 'ij': [7,4,4,4] }) # 新增每行最大值列 df['Max'] = df.max(axis=1) # 获取每行最大值对应的列索引 max_col_indices = df.idxmax(axis=1).apply(lambda x: df.columns.get_loc(x)) # 计算最大值列之前所有列的最小值 df['MinBefore'] = [ df.iloc[i, :idx].min() if idx > 0 else df.iloc[i, idx] for i, idx in enumerate(max_col_indices) ] print(df)
代码说明
df.max(axis=1):按行维度直接计算最大值,生成Max列df.idxmax(axis=1):获取每行最大值对应的列名,再通过df.columns.get_loc(x)将列名转换为索引位置- 列表推导式遍历每行:若最大值在第0列(索引0),则最小值为该列自身;否则截取
[:idx]范围的列,计算最小值
内容的提问来源于stack exchange,提问作者Sudeep Kafle
相关产品推荐
相关产品推荐

