我有以下数据帧:
macd_hist
Out[10]:
ADANIPORTS.NS ASIANPAINT.NS ... WIPRO.NS ZEEL.NS
Date ...
2015-06-22 NaN NaN ... NaN NaN
2015-06-23 NaN NaN ... NaN NaN
2015-06-24 NaN NaN ... NaN NaN
2015-06-25 NaN NaN ... NaN NaN
2015-06-26 NaN NaN ... NaN NaN
... ... ... ... ...
2020-06-12 -0.064481 1.635353 ... 0.213215 -1.800832
2020-06-15 -0.702969 0.135702 ... -0.096160 -3.020285
2020-06-16 -1.125824 -0.567845 ... -0.438076 -3.804984
2020-06-17 -1.423891 -2.635996 ... -0.347506 -4.095071
2020-06-18 -1.497237 -3.613468 ... -0.312098 -3.520918
[1227 rows x 50 columns]
我如何计算每个股票代码栏的天数从正值变为负值。所以,如果昨天的数字是正的,今天变成负的,那就是1,但它不应该计算,直到它再次变成负的,然后变成正的,然后再次变成负的,那将是另一个计数
我想数的是:
我会记录过零,。我在下面的解决方案中尝试了,但没有足够的数据进行统计。每个股票代码中只有一个过零。我的逻辑是,从每个股票代码器中获取零交叉,然后将其分配给1或0
cumsum
和cumcount
第一部分
如果你想要的只是股票的过零。这一行代码就可以了。基本上,使用标记器对行进行切片,布尔选择并将布尔值转换为整数
如果我没有弄错,您可以尝试以下方法:
让我们把它分解一下。它将执行以下操作:
(macd_hist >= 0)
:检查您的号码是否为正数.astype(int)
:转换为整数.diff()
:检测更改(-1表示从pos到neg,否则为1)< 0
:仅保留从pos到neg的更改.sum()
:计算此类更改的数量您可以使用
enumerate()
:输出:
相关问题 更多 >
编程相关推荐