比较熊猫系列中的上一个值和下一个值

时间:2018-09-18 09:18:24

标签: python pandas loops zip series

我有一个带有OHCL数据的熊猫数据框, 我想将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)

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试将数据框的值移至下一个和上一个以检查条件

考虑的数据框

        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

答案 1 :(得分:2)

使用班次:

低,

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))]

答案 2 :(得分:0)

使用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])