You need to enable JavaScript to run this app. Pandas DataFrame 按行查找满足1-5条件的对应列最大值
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame 按行查找满足1-5条件的对应列最大值

实现代码

可读性优先方案(小数据量适用)

逻辑清晰易调整,适合万行以内的数据集:

import pandas as pd
# 测试用DataFrame
df = pd.DataFrame({'Type': ['X', 'Y', 'Z'], 'ID': [1212, 2342, 2421], 
'A1': [1, 1, 1], 'A2': [0.3, 0.004, 0.86], 'B1': [2, 1.5, 3],       
'B2': [0.1, 0.8, 0.005], 'C1': [3, 2, 5], 'C2': [0.8, 0.2, 0.3],
'D1': [4, 2.5, 7], 'D2': [0.2, 0.4, 0.004], 'E1': [5, 3, 9],        
'E2': [0.9, 0.005, 0.99], 'F1': [6, 3.5, 11], 'F2': [0.4, 0.3, 0.4],
'G1': [7, 5, 13], 'G2': [0.6, 0.85, 0.003], 'H1': [8, 4.5, 15],     
'H2': [0.94, 0.088, 0.85], 'J1': [9, 5, 17], 'J2': [0.003, 0.0001,0.3]})

# 列名公共前缀配置
prefix_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J']

def calc_row_max(row):
    valid_values = []
    for p in prefix_list:
        # 校验对应后缀为1的列数值是否在1-5闭区间内
        if 1 <= row[f"{p}1"] <=5:
            valid_values.append(row[f"{p}2"])
    # 无符合条件值时返回空值,可按需修改默认返回值
    return max(valid_values) if valid_values else pd.NA

df['Max_Value'] = df.apply(calc_row_max, axis=1)
# 打印完整结果验证
print(df)

性能优先方案(大数据量适用)

采用向量化操作替代行遍历,处理十万行以上数据时效率提升显著:

prefix_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J']
# 生成符合区间条件的掩码矩阵
condition_mask = df[[f"{p}1" for p in prefix_list]].apply(lambda x: (x>=1)&(x<=5)).values
# 提取所有后缀为2的列数值矩阵
value_matrix = df[[f"{p}2" for p in prefix_list]].values
# 不符合条件的位置替换为空值后计算每行最大值
df['Max_Value'] = pd.DataFrame(value_matrix).where(condition_mask).max(axis=1).values

结果验证

最终新增的Max_Value列计算结果如下:

TypeIDMax_Value
X12120.90
Y23420.85
Z24210.86

内容的提问来源于stack exchange,提问作者Kahraman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 09:36:02