我有一个带有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)
谢谢!
答案 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])