比较Pandas系列中的先前值和下一个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较Pandas系列中的先前值和下一个值相关的知识,希望对你有一定的参考价值。

我有一个带有OHCL数据的pandas数据帧,我想将Low系列中的每个值与之前的值和该系列中的下一个值进行比较。

2018-08-31    1.15839
2018-08-30    1.16411
2018-08-29    1.16511
2018-08-28    1.16618
2018-08-27    1.15938
2018-08-24    1.15340

如果该值小于前一个值并且小于系列中的下一个值,我想将新系列(df.Low)中的值返回到该索引的True,否则返回False。

另一种可能性是检索条件为真但附加索引的值。

我尝试使用zip,这很有效,但我失去了索引。

Lows = []
Highs = []

for x,y,z in zip(df.Low_Price[::],df.Low_Price[1::],df.Low_Price[2::]):
    if x > y < z:
        Low = np.around(y, decimals=5)
        Lows.append(Low)

for x,y,z in zip(df.High_Price[::],df.High_Price[1::],df.High_Price[2::]):
    if x < y > z:
        High = np.around(y, decimals=5)
        Highs.append(High)

谢谢!

答案

您可以尝试将数据帧值移动到next和previous以检查条件

考虑数据帧

        0        1
0   2018-08-31  1.15839
1   2018-08-30  1.16411
2   2018-08-29  1.16511
3   2018-08-28  1.16618
4   2018-08-27  1.15938
5   2018-08-24  1.15340


[(df[1].ge(df[1].shift())) & df[1].le(df[1].shift(-1))]

日期:

[0    False
 1     True
 2     True
 3    False
 4    False
 5    False
 Name: 1, dtype: bool]

如果你的目的只是检查整列的低值,你可以使用

df[1].min()

日期:

1.1534
另一答案

使用班次:

对于低,

df[(df['a'].lt(df['a'].shift(-1))) & df['a'].lt(df['a'].shift(1))]

对于高,

df[(df['a'].gt(df['a'].shift(-1))) & df['a'].gt(df['a'].shift(1))]
另一答案

使用zip轻微修改您的解决方案

Lows = []
Highs = []

for i,x,y,z in zip(df.index[1::], df.Low_Price[::],df.Low_Price[1::],df.Low_Price[2::]):
    if x > y < z:
        Low = np.around(y, decimals=5)
        Lows.append([i, Low])

for i,x,y,z in zip(df.index[1::],df.High_Price[::],df.High_Price[1::],df.High_Price[2::]):
    if x < y > z:
        High = np.around(y, decimals=5)
        Highs.append([i, High])

以上是关于比较Pandas系列中的先前值和下一个值的主要内容,如果未能解决你的问题,请参考以下文章

根据 pandas 中的先前值标记字符串

python 循环遍历迭代的前一个,当前值和下一个值的Helper方法

如何在 RxSwift 中观察 UITableView 点击/选择的先前值和当前值?

如何删除 NA 值和上面和下面的行

可观察的当前值和先前值

Pandas 按行中的值和其他列中的值在行之间进行差异