我需要计算数据框中两个特定行之间的时间差。
如果Payload
列为[1]->[0]
,那么如果它设置为[0]->[1]
,我需要计算此行与其后一行之间的时间差
这是我的代码:
import pandas as pd
df= pd.DataFrame({'Time':['12/01/2019 17:01:10', '12/01/2019 13:23:00', '12/01/2019 11:23:00', '12/01/2019 10:01:10','12/01/2019 09:01:10','12/01/2019 09:01:10'],
'Payload':['[0]->[1]', '[0]->[1]','[1]->[0]','[0]->[1]','[1]->[0]','[0]->[1]']})
df.Time = pd.to_datetime(df.Time, format='%d/%m/%Y %H:%M:%S')
print('df\n',df)
for i in range (len(df)-1):
if ((df['Payload'].iloc[i]=='[1]->[0]') & (df['Payload'].iloc[i+1]=='[0]->[1]')):
df['diff']=df['Time'].iloc[i+1] - df['Time'].iloc[i]
print(df['diff'])
必须在这两行之间进行计算:
2 2019-01-12 11:23:00 [1]->[0]
3 2019-01-12 10:01:10 [0]->[1]
和这两行:
4 2019-01-12 09:01:10 [1]->[0]
5 2019-01-12 09:01:10 [0]->[1]
但是我的代码没有这样做
答案 0 :(得分:1)
原始数据帧没有列diff
,因此,当您在循环中调用它时,它将创建并不断用单个值替换。
我要做的是在循环之前创建一个空列表,将其填充,然后将其添加到您的数据框中。
diff = []
for i in range(len(df) - 1):
if df.iloc[i, 1] == '[1]->[0]' and df.iloc[i + 1, 1] == '[0]->[1]':
time_diff = df.iloc[i + 1, 0] - df.iloc[i, 0]
else:
time_diff = 0
diff.append(time_diff)
diff.append(0) # to fill the last value
df['Difference'] = diff