You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按行条件计算max、min、mean值?

问题解决:按行条件使用max函数失败

你代码里的核心问题很明确——else分支中你只是引用了max方法对象,没有调用它。把.max改成.max()就能正常获取该行指定列的最大值。

修正后的完整代码

import pandas as pd
data = {'Name': ['Tom', 'nick', 'krish', 'jack','bob'],
        'level_1': [2, -3, 7, -4,-2],
        'level_2': [6, 5, -3, -9,2],
        'level_3': [-2, -1, 4, 6,-4],
        }

df = pd.DataFrame(data)

print(df)

def f(row):
    if (row['level_1'] < 0) & (row['level_2'] < 0):
        val = row['level_1'] + row['level_2']
    elif (row['level_1'] > 0) & (row['level_2'] > 0):
        val = row['level_1'] - row['level_2']
    else:
        # 修正:调用max方法,添加括号执行计算
        val = row[['level_1','level_2','level_3']].max()

    return val

df['level_final'] = df.apply(f, axis=1)

print(40*'#')
print(df)

更高效的向量化实现方案

apply是逐行处理逻辑,在大数据集上性能较差。推荐使用pandas的向量化条件判断,速度提升显著:

import pandas as pd
import numpy as np

data = {'Name': ['Tom', 'nick', 'krish', 'jack','bob'],
        'level_1': [2, -3, 7, -4,-2],
        'level_2': [6, 5, -3, -9,2],
        'level_3': [-2, -1, 4, 6,-4],
        }

df = pd.DataFrame(data)

# 定义两个核心条件
cond1 = (df['level_1'] < 0) & (df['level_2'] < 0)
cond2 = (df['level_1'] > 0) & (df['level_2'] > 0)

# 用np.where嵌套实现多条件分支
df['level_final'] = np.where(
    cond1,
    df['level_1'] + df['level_2'],
    np.where(
        cond2,
        df['level_1'] - df['level_2'],
        df[['level_1', 'level_2', 'level_3']].max(axis=1)
    )
)

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:40:11