数据帧中连续负值的计数器

Counter for consecutive negative values in a Data-frame

我需要实现一个计数器,它进行如下输出所示的计数。它检查“数据”列的过去值是否为负值。

    data    output
0   -1      Nan        //  since there are no past values for data: count=NaN 
1   -2       1         //-1, so count= 1
2    4       2         //-2,-1   count=2
3    12      0         //         count=0
4   -22      0         //         count=0    
5   -12      1         //-22      count=1          
6   -7       2         // -22,-12   count=2     
7   -5       3         // -7,-22,-12    count=3
8   -33      4         // -5,7,-22,-12    count=4
9    2       5         // -33,-5,7,-22,-12    count=5
10   2       1         //        count=0

我的代码

import pandas as pd
import talib
import numpy as np     

df=pd.DataFrame()
df["data"]=[-1,-2,4,12,-22,-12,-7,-5,-33,2,2]
print(df)


c=0
for y in [0,len(ff)-1] : 
    for z in [1,10]:
        if (ff["data"].shift(-z)).any()<=0:c=c+1
        else:c
        if (ff["data"].shift(-z)).any()>0:break
    count["dd"]=c

需要输出:

我不太确定如何写“Nan”(我自己也不是很好),但这里的代码似乎可以满足您的要求:

df = pd.DataFrame()
df["data"] = [-1, -2, 4, 12, -22, -12, -7, -5, -22, 2, 2]
def generateOutput(df):
    a = [0]
    for i in range(len(df) - 1):
        if df["data"][i] < 0:
            a.append(a[-1] + 1)
        else:
            a.append(0)
    df["output"] = a
    return df

print(df)
df = generateOutput(df)
print(df)

这是我启动程序时的输出

    data
0     -1
1     -2
2      4
3     12
4    -22
5    -12
6     -7
7     -5
8    -22
9      2
10     2
    data  output
0     -1       0
1     -2       1
2      4       2
3     12       0
4    -22       0
5    -12       1
6     -7       2
7     -5       3
8    -22       4
9      2       5
10     2       0