Skip to main content
 首页 » 编程设计

python之根据另一列的符号翻转标记 Pandas 列

2025年05月04日22cmt

我有一个像这样的 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 

您会注意到,行根据其符号分配了局部最小值/最大值。