首页 > 解决方案 > pandas df中的多重逻辑比较

问题描述

如果我有以下熊猫 df

A   B   C   D
1   2   3   4
2   2   3   4

我想添加一个新列为 1、2 或 3,具体取决于,

(A > B) && (B > C) = 1
(A < B) && (B < C) = 2
Else = 3

最好的方法是什么?

标签: pythonpandasdataframe

解决方案


您可以使用numpy.select来构建您的多个条件。最后一个参数代表默认值。

conditions = [(df.A > df.B) & (df.B > df.C),
              (df.A < df.B) & (df.B < df.C)]

values = [1, 2]

df['E'] = np.select(conditions, values, 3)

有几种选择:嵌套numpy.where、顺序pd.DataFrame.locpd.DataFrame.apply. 该解决方案的主要好处是可读性,同时保持矢量化。


推荐阅读