Python 在我的数据框中添加一个计数器列,该列根据温度值递增(在其他列中)
我想在df中为计数器创建一个新列,当温度值从零变为非零时,该列将递增 我正在附加用于逻辑的循环。该值位于计数器变量中,但我希望它位于下表所示的列中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
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