根据另一列的符号翻转标记熊猫列

新手

我有一个这样的熊猫数据框:

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中真的很慢。

有什么帮助吗?

cs95

您可以使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章