Python 在我的数据框中添加一个计数器列,该列根据温度值递增(在其他列中)

Python 在我的数据框中添加一个计数器列,该列根据温度值递增(在其他列中),python,pandas,Python,Pandas,我想在df中为计数器创建一个新列,当温度值从零变为非零时,该列将递增 我正在附加用于逻辑的循环。该值位于计数器变量中,但我希望它位于下表所示的列中 prev_temp, counter, n= -300, 0,0 for index, row in df.iterrows(): if row.Tempo!=0 and prev_temp==0: counter+=1 n+=1 prev_temp=rows.Tempo elif r

我想在df中为计数器创建一个新列,当温度值从零变为非零时,该列将递增

我正在附加用于逻辑的循环。该值位于计数器变量中,但我希望它位于下表所示的列中

prev_temp, counter, n= -300, 0,0

for index, row in df.iterrows():
    if row.Tempo!=0 and prev_temp==0:
        counter+=1
        n+=1
        prev_temp=rows.Tempo
    elif row.Tempo==0 and prev_temp!= 0:
        prev_temp=rows.Tempo
        
不 速度 计数 1. 80 1. 2. 81.6 1. 3. 0 1. 4. 0 1. 5. 0 1. 6. 81.6 2. 7. 80 2. 8. 83.7 2. 9 0 2. 10 0 2. 11 0 2. 12 81.6 3.
使用带有
shift
cumsum
的布尔值作为递增数

s = df['Tempo '].shift().eq(0) & df['Tempo '].gt(0)

df['counter'] = s.cumsum() + 1

  No.   Tempo   Count  counter
0      1    80.0      1        1
1      2    81.6      1        1
2      3     0.0      1        1
3      4     0.0      1        1
4      5     0.0      1        1
5      6    81.6      2        2
6      7    80.0      2        2
7      8    83.7      2        2
8      9     0.0      2        2
9     10     0.0      2        2
10    11     0.0      2        2
11    12    81.6      3        3


您可以将所有非零值设置为1,并查找顺序元素之间的差异:

df['Count'] =  df.Tempo.gt(0).astype(int).diff().eq(1).cumsum().add(1)
结果:

    No.  Tempo  Count
0     1   80.0      1
1     2   81.6      1
2     3    0.0      1
3     4    0.0      1
4     5    0.0      1
5     6   81.6      2
6     7   80.0      2
7     8   83.7      2
8     9    0.0      2
9    10    0.0      2
10   11    0.0      2
11   12   81.6      3
    No.  Tempo  Count
0     1   80.0      1
1     2   81.6      1
2     3    0.0      1
3     4    0.0      1
4     5    0.0      1
5     6   81.6      2
6     7   80.0      2
7     8   83.7      2
8     9    0.0      2
9    10    0.0      2
10   11    0.0      2
11   12   81.6      3