python - 如何简化 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'])
任何建议,将不胜感激
解决方案
使用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)
推荐阅读
- c++ - C++ 中的 Mat 和 Bmat
- c++ - 试图为我的日期类重载运算符 ++。仍然收到错误:无法增加“日期”类型的值
- php - 如何使用 www 强制域
- javascript - 最低和最高数量是多少
- javascript - 箭头函数中的Javascript“This”差异
- amazon-web-services - 仅从 DynamoDB 表中获取最新项目并通过 Lambda 将其放入另一个 DynamoDB 表中
- sql - oracle 选择具有相同列但其他列不同的值
- php - Paypal 返回输入 - 404 未找到
- docker - 从 docker 容器连接到主机端口
- c# - 当 WPF DataGrid 没有行时显示消息“无数据”