【问题标题】:Python Pandas "<" operator against "<=" errorPython Pandas“<”运算符针对“<=”错误
【发布时间】:2022-01-27 02:15:05
【问题描述】:

我的目标是在数据框中找到临时最小值。为了找到它们,我在数据框列中搜索低于前 3 个值的最小值的值。在 Windows 中在 Google Colab 和 python 3.9 中测试。

也许还有其他更多的Pandastic方式来做到这一点。

问题:使用&lt;= 时似乎一切正常,但使用&lt; 时,却什么也没找到。即使提供的数据应该匹配。

import pandas as pd    
data_list = [55,66,77,88,99,88,77,66,55,54,65,67,68,70,73,78,83]  # use any other values
low = pd.Series(data_list)
df = pd.DataFrame(low.values, columns=['Low'])
df
        Low
    0   55
    1   66
    2   77
    3   88
    4   99
    5   88
    6   77
    7   66
    8   55
...

df.plot(grid=True)

当试图找到低于前 3 行 OR EQUAL 的值时,一切正常:

df[df['Low'] <= df['Low'].rolling(3).min()]

Low
5   88
6   77
7   66
8   55
9   54

问题:但是当只使用 运算符时,什么也没找到。

df[df['Low'] < df['Low'].rolling(3).min()]

这是 google colab (python 3.7) 中使用的版本,已更新:

!pip install numpy --upgrade
!pip install pandas --upgrade
!pip freeze ...
numpy==1.21.5
pandas==1.3.5

使用本地 Python 3.9 时,行为相同。

【问题讨论】:

  • 根据您提供的数据,这种行为是预期的,只有&lt;= 有效,因为当它为这些行返回True 时,它们实际上是==

标签: python pandas


【解决方案1】:

试图找到低于前 3 行的值

当您执行df[df['Low'] &lt;= df['Low'].rolling(3).min()]df[df['Low'] &lt; df['Low'].rolling(3).min()] 时,您不是在比较前3 行,而是当前行和前2 行。

如果您想获得所需的行为,您需要shift

import pandas as pd    
data_list = [55,66,77,88,99,88,77,66,55,54,65,67,68,70,73,78,83]  # use any other values
low = pd.Series(data_list)
df = pd.DataFrame(low.values, columns=['Low'])
print(df[df['Low'] < df['Low'].rolling(3).min().shift()])

输出

   Low
6   77
7   66
8   55
9   54

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 2013-10-20
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多