比较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系列中的先前值和下一个值的主要内容,如果未能解决你的问题,请参考以下文章
python 循环遍历迭代的前一个,当前值和下一个值的Helper方法