【问题标题】:Filtering a DataFrame based on multiple column criteria根据多列条件过滤 DataFrame
【发布时间】:2014-08-12 09:02:49
【问题描述】:

如何使用 'and' 过滤数据框?换句话说,如果我有一个名为 m 的数据框并且它具有列 a、b、c、d、e,我将如何返回 b 列中的值大于 120 且列 c = 7.3 中的值的所有行?

我试过了,但我收到了一个错误:

打印(m[m['b'] >120, m['c'] ==7.3])

【问题讨论】:

  • 尝试使用标准 python or 命令。
  • print(m[m['b'] >120] or m[m['c'] ==7.4]) ValueError: DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。这样做的正确方法是什么?

标签: python pandas


【解决方案1】:

要扩展 GoBrewers14 的答案,您需要用括号括起来以克服 python 中运算符的求值顺序。

例如下一条语句失败:

In [3]: 1 > 0 & 'a' < 'b'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-5d58a7b0bade> in <module>()
----> 1 1 > 0 & 'a' < 'b'

TypeError: unsupported operand type(s) for &: 'int' and 'str'

因为python首先评估0 &amp; 'a'。这就是为什么你需要用括号括起来的语句才有意义:

In [4]: (1 > 0) & ('a' < 'b')
Out[4]: True

简而言之,您正在寻找:

m[(m['b'] > 120) & (m['c'] == 7.3)]

【讨论】:

    【解决方案2】:
    >>> mask = (m.b > 120) & (m.c == 7.3)
    >>> m[mask]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多