如何在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
相关产品推荐
相关产品推荐

