python - 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
最好的方法是什么?
解决方案
您可以使用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.loc
、pd.DataFrame.apply
. 该解决方案的主要好处是可读性,同时保持矢量化。
推荐阅读
- java - 有什么办法可以解决这里造成的死锁吗?
- mysql - 错误 1690 (22003):BIGINT UNSIGNED 值超出
- javascript - 重新加载页面时如何隐藏vue js代码?
- python-3.x - BeautifulSoup 4 是否解析外部 DTD 实体?
- angular - Mat-select 更改值不会通过双向绑定传播
- c++ - 在嵌套循环中使用迭代器通过两个向量来匹配元素并从向量中擦除
- http - OAuth 客户端 - 如何根据请求将 javascript 源从 http 更改为 https?
- java - Spring Resttemplate 交换方法调用 PATCH 请求
- c# - 如何从 Dispatcher.Invoke 返回值,使用委托函数作为参数
- php - 如何使用 PHP(代码点火器)在 HTML 中制作数组项超链接