【问题标题】:Python Pandas: Boolean indexing on multiple columns [duplicate]Python Pandas:多列的布尔索引[重复]
【发布时间】:2013-06-17 10:59:48
【问题描述】:

尽管至少有twogood 教程介绍了如何在 Python 的pandas 库中对 DataFrame 进行索引,但我仍然无法在多个列上找到一种优雅的SELECTing 方式。

>>> d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 8]})
>>> d
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2] # This works fine
   x  y
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2 & d['y']>7] # I had expected this to work, but it doesn't
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我发现(我认为是)一种相当不雅的方式,像这样

>>> d[d['x']>2][d['y']>7]

但它并不漂亮,而且它的可读性得分相当低(我认为)。

有没有更好、更符合 Python 的方法?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这是一个优先运算符问题。

    您应该添加额外的括号以使您的多条件测试正常工作:

    d[(d['x']>2) & (d['y']>7)]
    

    您提到的教程的This section 显示了一个带有几个布尔条件的示例,并使用了括号。

    【讨论】:

      【解决方案2】:

      可能还有更好的方法,但是

      In [56]: d[d['x'] > 2] and d[d['y'] > 7]
      Out[56]: 
         x  y
      4  5  8
      

      有效。

      【讨论】:

      • 这可行,但最终使用 python 运算符(而不是 numpy),所以会慢得多
      • 这是一个不错的解决方案。我喜欢它明确使用and 的事实。更清楚地表明有两个条件正在评估。
      • 哦,我刚刚找到了这个问题的a duplicate。哎呀。
      猜你喜欢
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多