【问题标题】:Calculate time difference according to if condition with PythonPython根据if条件计算时间差
【发布时间】:2020-03-26 22:28:15
【问题描述】:

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

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

但我的代码没有这样做

【问题讨论】:

    标签: python-3.x pandas time


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2022-08-18
      • 2022-01-08
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多