【问题标题】:Query pandas data frame with `or`b boolean? [duplicate]用`or`b布尔值查询熊猫数据框? [复制]
【发布时间】:2017-05-19 00:43:04
【问题描述】:

我有一个简单的 pandas 数据框。

import pandas as pd    
x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
y = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
users =['mark', 'mark', 'mark', 'rachel', 'rachel', 'rachel', 'jeff', 'jeff', 'jeff', 'lauren', 'lauren', 'lauren']

df = pd.DataFrame(dict(x=x, y=y, users=users)

我想保留数据框的某些行。假设所有“rachels”和“jeffs”。我试过df.query

df=df.query('users=="rachel"' or 'users=="jeff"')

结果是只有users=="rachel" 的数据框。有没有办法组合查询?

【问题讨论】:

  • df.query('(users=="rachel") or (users=="jeff")') 甚至df.query('users=="rachel" or users=="jeff"') 都可以解决问题。使用pandas==1.2.4 测试。

标签: python-3.x pandas dataframe slice


【解决方案1】:

标准方法是使用按位或运算符|。为了清楚地解释原因,我建议查看this answer。由于 Python 的计算顺序,您还需要在每个条件周围使用括号。

df[(df.users == 'rachel') | (df.users == 'jeff')]
    users   x    y
3  rachel  30  200
4  rachel   5  300
5  rachel  10  300
6    jeff  20  400
7    jeff  30  400
8    jeff   5  500

使用查询,您仍然可以只使用 or 运算符:

df.query("users=='rachel' | users=='jeff'")
    users   x    y
3  rachel  30  200
4  rachel   5  300
5  rachel  10  300
6    jeff  20  400
7    jeff  30  400
8    jeff   5  500

【讨论】:

  • 不错!将尽快标记为已回答!谢谢!
  • 不用担心。 @EdChum 的评论也是一个简单的解决方案。
  • 您将如何创建逻辑以仅显示名称为 rachel 或 jeff 且家乡为芝加哥的结果?所以所有来自芝加哥的 rachels 和所有来自芝加哥的 jeffs,但不是来自芝加哥的 steves 或来自亚特兰大的 rachels。您可以使用“users =='rachel' | users=='jeff' & hometown=='chicago'”,还是 AND 仅适用于 jeffs,并且您需要包含“& hometown=='Chicago' " 到 OR 的两边?
【解决方案2】:

另一种方法是:

df=df.query('users=="rachel"').append(df.query('users=="jeff"'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2021-04-06
    • 2012-11-05
    • 2021-03-19
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多