Сравнение предыдущего значения и следующего значения в серии Pandas - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть пандас с данными 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 для этого индекса, еще ложь.

Другая возможность - получить значение, если условие истинно, но с прикрепленным к нему индексом.

Я попытался с 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 голосов
/ 18 сентября 2018

Небольшая модификация вашего решения с 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])
0 голосов
/ 18 сентября 2018

Использование смены:

для низких,

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))]
0 голосов
/ 18 сентября 2018

вы можете попытаться сместить значения данных в следующий и предыдущий для проверки условий

рассматриваемый кадр данных

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

Out:

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

, если ваше намерениечтобы просто проверить низкое значение целого столбца, вы можете использовать

df[1].min()

Out:

1.1534
...