我有一个像这样的 Pandas 数据框:
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
您会注意到,行根据其符号分配了局部最小值/最大值。
