OP здесь, я придумал лучший способ, используя .shift (), это намного проще и на 30% быстрее, чем цикл, как было первоначально описано. Я отредактировал начальный фрейм данных, чтобы учесть, когда Sensor_State переходит от 0 к 1, обратно к 0 и 1, чтобы учесть эти обстоятельства. Надеюсь, это кому-то поможет:
In [1]:
import numpy as np
import pandas as pd
a=np.arange(1,24).tolist()
b=[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]
c = [0,0,1,2,4,8,9,10,10,10,0,0,0,0,0,2,4,8,10,10,10,10,10]
data = {'Seconds': a, 'Sensor_State': b, 'Temperature': c}
df = pd.DataFrame.from_dict(data)
df['Sensor_Warmup_State'] = 0
df
Out[1]:
Seconds Sensor_State Temperature Sensor_Warmup_State
0 1 0 0 0
1 2 0 0 0
2 3 1 1 0
3 4 1 2 0
4 5 1 4 0
5 6 1 8 0
6 7 1 9 0
7 8 1 10 0
8 9 1 10 0
9 10 1 10 0
10 11 0 0 0
11 12 0 0 0
12 13 0 0 0
13 14 0 0 0
14 15 0 0 0
15 16 1 2 0
16 17 1 4 0
17 18 1 8 0
18 19 1 10 0
19 20 1 10 0
20 21 1 10 0
21 22 1 10 0
22 23 1 10 0
Новый код:
In [2]:
df['Sensor_Warmup_State'] = (df['Sensor_State'] == 1) &\
(df['Sensor_State'].shift(1) == 1) &\
(df['Sensor_State'].shift(2) == 1) &\
(df['Sensor_State'].shift(3) == 1) &\
(df['Sensor_State'].shift(4) == 1) &\
(df['Sensor_State'].shift(5) == 1)
df['Processed_Temp'] = df['Sensor_Warmup_State'] * df['Temperature']
df
Out[2]:
Seconds Sensor_State Temperature Sensor_Warmup_State Processed_Temp
0 1 0 0 False 0
1 2 0 0 False 0
2 3 1 1 False 0
3 4 1 2 False 0
4 5 1 4 False 0
5 6 1 8 False 0
6 7 1 9 False 0
7 8 1 10 True 10
8 9 1 10 True 10
9 10 1 10 True 10
10 11 0 0 False 0
11 12 0 0 False 0
12 13 0 0 False 0
13 14 0 0 False 0
14 15 0 0 False 0
15 16 1 2 False 0
16 17 1 4 False 0
17 18 1 8 False 0
18 19 1 10 False 0
19 20 1 10 False 0
20 21 1 10 True 10
21 22 1 10 True 10
22 23 1 10 True 10