首页 > 解决方案 > 如何简化 Pandas 中的条件

问题描述

我有 3 列DF[X,Y,Z];基于 3 列,我导出 A 列。下面是导出 A 列的表达式。

A = If X<Y-Z Then Y-Z Elsif X>Y+Z Then Y+Z ELse X

目前我不知道如何像在 Pandas 中那样实现上述表达式,而是我按照以下方式进行了操作并且它正在工作。似乎下面的逻辑更加复杂和冗余。你能告诉我如何将下面的逻辑修改成这个A = If X<Y-Z Then Y-Z Elsif X>Y+Z Then Y+Z Else X

DF.loc[(DF['X']<abs(DF['Y']-DF['Z']))&(DF['min']<DF['max']), 'A'] = abs(DF['Y']-DF['Z'])
DF.loc[(DF['X']>abs(DF['Y']+DF['Z']))&(DF['min']<DF['max']), 'A'] = abs(DF['Y']+DF['Z'])
DF['A'] = DF['A'].fillna(DF['X'])

任何建议,将不胜感激

标签: pythonpython-3.xpandasdataframe

解决方案


使用numpy.select. 这将是最快的性能。

import numpy as np

conditions = [(df.Y - df.Z) > df.X, (df.Y + df.Z) < df.X]
choices = [df.Y - df.Z, df.Y + df.Z]

df['A'] = np.select(conditions, choices, default=df.X)

推荐阅读