使用Python根据条件计算时间差

时间:2019-12-02 10:14:19

标签: python-3.x pandas time

我需要计算数据框中两个特定行之间的时间差。

如果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]

但是我的代码没有这样做

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