首页 > 解决方案 > Pandas 条件切片,同时使用“and”和“or”

问题描述

这只是一个带有是或否答案的快速问题。我在谷歌或这里找不到答案(谷歌很难)。

我只想知道我这样做是否正确。

我正在尝试选择符合某些条件的数据。这是我的代码的片段。

c1 = (data['recency']<=3) # seen in the last 3 months
c2 = (data['transactions_per_month']>=1) # buys a ticket once a month
c3 = (data['av_spend_per_month']>=30) # spends at least €30 per month
c4 = (data['Driver']==1) # is a driver

# slice the df
data[c1 & (c2 | c3) & c4]

这部分正确吗?我可以在我的条件中间(c2 | c3)添加一个条件吗?|&

如果错了,正确的做法是什么?

标签: pythonpandas

解决方案


是的,这是一件非常合理的事情。

根据 Pandas 手册,您可以使用布尔运算符组合多个选择器,例如&,|~.

另一种常见的操作是使用布尔向量来过滤数据。运算符有:|for or、&for and 和~for not。这些必须使用括号进行分组,因为默认情况下 Python 将评估表达式,例如df['A'] > 2 & df['B'] < 3df['A'] > (2 & df['B']) < 3而所需的评估顺序是(df['A'] > 2) & (df['B'] < 3)

来源。)

您还可以探索DataFrame.query()方法,它可以完成类似的事情。


推荐阅读