如何在Pandas DataFrame的where子句中使用一个特定列的值?[英] How do I use a specific column's value in a Pandas DataFrame where clause?

本文是小编为大家收集整理的关于如何在Pandas DataFrame的where子句中使用一个特定列的值?的处理方法,想解了如何在Pandas DataFrame的where子句中使用一个特定列的值?的问题怎么解决?如何在Pandas DataFrame的where子句中使用一个特定列的值?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

当特定列也满足单独的条件时,我正在尝试选择 pandas DataFrame 中满足特定条件的所有单元格.

给定以下数据框:

      A    B    C    D
1/1   0    1    0    1
1/2   2    1    1    1
1/3   3    0    1    0 
1/4   1    0    1    2
1/5   1    0    1    1
1/6   2    0    2    1
1/7   3    5    2    3

当 D 也 > 1 时,我想以某种方式选择列大于其先前值的数据.我当前尝试使用的语法是:

matches = df[(df > df.shift(1)) & (df.D > 1)]

但是,当我这样做时,我收到以下错误:

<块引用>

TypeError: 无法操作 [array([nan, nan, nan, nan],dtype=object)] 具有块值 [无法广播操作数连同形状 (2016) (4) ]

注意:错误是我的实际代码的直接复制和过去,因此错误中的描述和形状不会直接与我的示例 DataFrame 相关.

我知道是 df.D > 1 导致了问题,并且直接将列与 D 进行比较是有效的(例如 df > df.D).尝试将 D 与值 1 进行比较时,我的语法有什么问题,我该如何做到这一点?

推荐答案

这个应该直接工作,但是 pandas 没有广播和操作符(将在 0.14 发生).这是一种解决方法.

In [74]: df
Out[74]: 
     A  B  C  D
1/1  0  1  0  1
1/2  2  1  1  1
1/3  3  0  1  0
1/4  1  0  1  2
1/5  1  0  1  1
1/6  2  0  2  1
1/7  3  5  2  3

这是一个where操作,本质上是把np.nan条件为False的地方

In [78]: x = df[df>df.shift(1)]

In [79]: x
Out[79]: 
      A   B   C   D
1/1 NaN NaN NaN NaN
1/2   2 NaN   1 NaN
1/3   3 NaN NaN NaN
1/4 NaN NaN NaN   2
1/5 NaN NaN NaN NaN
1/6   2 NaN   2 NaN
1/7   3   5 NaN   3

按第二个条件选择

In [80]: x[df.D>1]
Out[80]: 
      A   B   C  D
1/4 NaN NaN NaN  2
1/7   3   5 NaN  3

本文地址:https://www.itbaoku.cn/post/1728133.html