Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算数字从正变为负的天数_Python_Pandas_Multi Index_Zerocrossing - Fatal编程技术网

Python 计算数字从正变为负的天数

Python 计算数字从正变为负的天数,python,pandas,multi-index,zerocrossing,Python,Pandas,Multi Index,Zerocrossing,我有以下数据帧: macd_hist Out[10]: ADANIPORTS.NS ASIANPAINT.NS ... WIPRO.NS ZEEL.NS Date ... 2015-06-22 NaN NaN ... NaN NaN 2015-06-23 N

我有以下数据帧:

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,但它不应该计算,直到它再次变成负的,然后变成正的,然后再次变成负的,那将是另一个计数

我想数的是:


如果我没有弄错,您可以尝试以下方法:

macd_hist>0.astypeint.diff>0.sum 让我们把它分解一下。它将执行以下操作:

macd_hist>=0:检查您的号码是否为正数 .astypeint:转换为整数 .diff:检测变化-1表示从pos到neg,否则为1 <0:仅保留从pos到neg的更改 .sum:计算此类变更的数量
如果我没有弄错,您可以尝试以下方法:

macd_hist>0.astypeint.diff>0.sum 让我们把它分解一下。它将执行以下操作:

macd_hist>=0:检查您的号码是否为正数 .astypeint:转换为整数 .diff:检测变化-1表示从pos到neg,否则为1 <0:仅保留从pos到neg的更改 .sum:计算此类变更的数量 您可以使用枚举:

您可以使用枚举:


我会记录过零,。我在下面的解决方案中尝试了,但没有足够的数据进行统计。每个股票代码中只有一个过零。我的逻辑是,从每个股票代码器中获取零交叉,然后将其分配给1或0。积数和积数

第一部分

如果你想要的只是股票的过零。这一行代码就可以了。基本上,使用标记器对行进行切片,布尔选择并将布尔值转换为整数

df.iloc[:,1::].apply(lambda x:x.le(0).ne(x.le(0).shift(1))).astype(int)



     ADANIPORTS  ASIANPAINT  WIPRO  ZEEL
0           1           1      1     1
1           0           0      0     0
2           0           0      0     0
3           0           0      0     0
4           0           0      0     0
5           0           1      1     0
6           0           0      1     0
7           0           1      0     0
8           0           0      0     0
9           0           0      0     0

我会记录过零,。我在下面的解决方案中尝试了,但没有足够的数据进行统计。每个股票代码中只有一个过零。我的逻辑是,从每个股票代码器中获取零交叉,然后将其分配给1或0。积数和积数

第一部分

如果你想要的只是股票的过零。这一行代码就可以了。基本上,使用标记器对行进行切片,布尔选择并将布尔值转换为整数

df.iloc[:,1::].apply(lambda x:x.le(0).ne(x.le(0).shift(1))).astype(int)



     ADANIPORTS  ASIANPAINT  WIPRO  ZEEL
0           1           1      1     1
1           0           0      0     0
2           0           0      0     0
3           0           0      0     0
4           0           0      0     0
5           0           1      1     0
6           0           0      1     0
7           0           1      0     0
8           0           0      0     0
9           0           0      0     0

虽然这种方法有效,但在使用熊猫时并不太合适。一个主要的规则是避免为循环手动写入。虽然这样做有效,但在使用pandas时并不太合适。一个主要规则是避免为循环手动写入
 #Zerocrossing

a=df.ZEEL.lt(0)
c1=a.ne(a.shift(1))

b=df.WIPRO.lt(0)
c2=b.ne(b.shift(1))

c=df.ASIANPAINT.lt(0)
c3=c.ne(c.shift(1))

d=df.ADANIPORTS.lt(0)
c4=d.ne(d.shift(1))



 Attribute in columns

df['ADANIPORTSZC']=np.where(c4,1,0)
df['ASIANPAINTZC']=np.where(c3,1,0)
df['WIPROZC']=np.where(c2,1,0)
df['ZEELZC']=np.where(c1,1,0)




 Date  ADANIPORTS  ASIANPAINT     WIPRO      ZEEL  ADANIPORTSZC  \
0  2015-06-22    0.000000    0.000000  0.000000  0.000000             1   
1  2015-06-23    0.000000    0.000000  0.000000  0.000000             0   
2  2015-06-24    0.000000    0.000000  0.000000  0.000000             0   
3  2015-06-25    0.000000    0.000000  0.000000  0.000000             0   
4  2015-06-26    0.000000    0.000000  0.000000  0.000000             0   
5  2020-06-12   -0.064481    1.635353  0.213215 -1.800832             1   
6  2020-06-15   -0.702969    0.135702 -0.096160 -3.020285             0   
7  2020-06-16   -1.125824   -0.567845 -0.438076 -3.804984             0   
8  2020-06-17   -1.423891   -2.635996 -0.347506 -4.095071             0   
9  2020-06-18   -1.497237   -3.613468 -0.312098 -3.520918             0   

   ASIANPAINTZC  WIPROZC  ZEELZC  
0             1        1       1  
1             0        0       0  
2             0        0       0  
3             0        0       0  
4             0        0       0  
5             0        0       1  
6             0        1       0  
7             1        0       0  
8             0        0       0  
9             0        0       0 
df.iloc[:,1::].apply(lambda x:x.le(0).ne(x.le(0).shift(1))).astype(int)



     ADANIPORTS  ASIANPAINT  WIPRO  ZEEL
0           1           1      1     1
1           0           0      0     0
2           0           0      0     0
3           0           0      0     0
4           0           0      0     0
5           0           1      1     0
6           0           0      1     0
7           0           1      0     0
8           0           0      0     0
9           0           0      0     0