python - 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)
添加一个条件吗?|
&
如果错了,正确的做法是什么?
解决方案
是的,这是一件非常合理的事情。
根据 Pandas 手册,您可以使用布尔运算符组合多个选择器,例如&
,|
和~
.
另一种常见的操作是使用布尔向量来过滤数据。运算符有:
|
for or、&
for and 和~
for not。这些必须使用括号进行分组,因为默认情况下 Python 将评估表达式,例如df['A'] > 2 & df['B'] < 3
,df['A'] > (2 & df['B']) < 3
而所需的评估顺序是(df['A'] > 2) & (df['B'] < 3)
。
(来源。)
您还可以探索DataFrame.query()方法,它可以完成类似的事情。
推荐阅读
- r - 从列表中查找每行的最小值及其对应的列号
- c# - 依赖于 File 类和其他方法的测试方法
- javascript - 如何在summernote编辑器中上传多张图片
- android - 更改材质下拉菜单上的选定项目
- javascript - 在 Stimulus 框架中使用 DataTables 的问题
- database-connection - H2 数据库从哪里提取最新的数据库连接并将它们添加到 .h2.server.properties?
- sql - 使用 IF/ELSE 语句将列添加到 SQL 中的现有表
- list - Markdown:在嵌套列表之后继续列表中的文本
- python - Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
- xamarin - 在 XF 5.0.0.2012 中将 Visual as Material 设置为 Xamarin.Forms Entry 控件时无法获取 Android 本机元素