我正在从数据帧df中循环打开和关闭的传感器读取温度数据。每次传感器打开时,大约需要 5 行数据来进行热平衡。我想在温度列上运行的任何统计数据中忽略传感器预热时间降低的温度值,并且在绘图时也忽略它们。数据框中的三列是“秒”、“传感器状态”和“温度”。我创建了一个名为“ Sensor_Warmup_State ”的第四列,它是使用循环创建的,并在“ Sensor_State ”中检测到0后将所有值变为0' 列在接下来的 5 个单元格中。然后我将“温度”乘以“ Sensor_Warmup_State ”得到“ Processed_Temp ”。这行得通,但我知道应该有一个更pythonic、更快的方法来做到这一点,我只是还没有专业知识。
这就是我所拥有的。创建数据框:
import numpy as np
a=np.arange(1,21).tolist()
b = (np.zeros((2), dtype=int)).tolist()
c = (np.ones((18), dtype = int)).tolist()
d = b + c
e = [0,0,1,2,4,8,9,10,10,10,10,10,10,10,10,10,10,10,10,10]
data = {'Seconds': a, 'Sensor_State': d, 'Temperature': e}
df = pd.DataFrame.from_dict(data)
df['Sensor_Warmup_State'] = 0
df
要创建最后两列:
NumOfRows = df['Sensor_State'].size
x=0
for index, value in df['Sensor_State'].iteritems():
if (value == 0) & (index < NumOfRows-5):
df['Sensor_Warmup_State'].iloc[index] = 0
elif (value == 1) & (index < NumOfRows-5):
df.loc[(index + 5), 'Sensor_Warmup_State'] = 1
df['Processed_Temp'] = df['Sensor_Warmup_State'] * df['Temperature']
df