我有一个这样的熊猫数据框:
Index High Low MA(5)-MA(20)
0 100 90 -1
1 101 91 -2
2 102 92 +1
3 99 88 +2
我想在MA(5)-MA(20)为正时获得最高点,而最低点则为负。
问题是我只希望局部最大值和最小值,而不是全局最大值,因此,每次MA(5)-MA(20)的符号翻转时,都必须重新设置最大值和最小值。
我不想使用for循环,因为它们在python中真的很慢。
有什么帮助吗?
您可以使用np.sign
获取最后一列的符号。执行一个groupby
操作,并使用它np.where
来相应地分配值。
v = np.sign(df['MA(5)-MA(20)']) < 1
g = df.groupby(v.ne(v.shift()).cumsum())
df['Maxima/Minima'] = np.where(
v, g.Low.transform('min'), g.High.transform('max')
)
df
Index High Low MA(5)-MA(20) Maxima/Minima
0 0 100 90 -1 90
1 1 101 91 -2 90
2 2 102 92 1 102
3 3 99 88 2 102
您会注意到,已根据行的符号为行分配了局部最小值/最大值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句