【问题标题】:How to calculate time difference between two dates in pandas Dataframe如何计算pandas Dataframe中两个日期之间的时差
【发布时间】:2023-02-02 20:25:13
【问题描述】:

我有一个数据框,它有多行和日期列。日期列有日期和时间。不是每一行都有增量时间,所以我想在每一行之后计算当前日期和上一个日期之间的时差(以秒为单位)。

import pandas as pd
data = pd.date_range('1/1/2011', periods = 10, freq ='H')

在上面的 sn-p 中,每一步后的时差是 1 小时,这意味着 3600 秒,所以我想要一个包含 [(<prev date time>, <current_datetime>, <time_difference>),.....] 的元组列表。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我想要一个元组列表具有 [(前一个日期时间,当前日期时间, 时间差异),.....]

    在这种情况下,使用 listzip 并计算与 tolal_seconds 的时差:

    data = pd.date_range("1/1/2011", periods = 10, freq ="H")
    ​
    L = list(zip(data.shift(), # <- previous time
                 data,         # <- current time
                (data.shift() - data).total_seconds())) # <- time diff
    

    注意:如果你操纵一个数据框,您需要将data替换为df["date_column"]

    的 输出 :

    print(L)
    
    [(Timestamp('2011-01-01 01:00:00', freq='H'),
      Timestamp('2011-01-01 00:00:00', freq='H'),
      3600.0),
     (Timestamp('2011-01-01 02:00:00', freq='H'),
      Timestamp('2011-01-01 01:00:00', freq='H'),
      3600.0),
     (Timestamp('2011-01-01 03:00:00', freq='H'),
      Timestamp('2011-01-01 02:00:00', freq='H'),
      3600.0),
     (Timestamp('2011-01-01 04:00:00', freq='H'),
      Timestamp('2011-01-01 03:00:00', freq='H'),
      3600.0),
     (Timestamp('2011-01-01 05:00:00', freq='H'),
      Timestamp('2011-01-01 04:00:00', freq='H'),
      3600.0),
      ...
    

    【讨论】:

      【解决方案2】:

      您可以通过使用 Pandas 中的 diff 函数来计算数据列中连续行之间的时间差来实现这一点。这是一个例子:

      df = pd.DataFrame({"date": pd.date_range("1/1/2011", periods=10, freq="H")})
      
      # Calculate the time difference between consecutive rows in seconds
      df["time_diff"] = df["date"].diff().dt.total_seconds()
      
      # Create a list of tuples
      result = [(df.iloc[i-1]["date"], row["date"], row["time_diff"]) for i, row in df[1:].iterrows()]
      

      df:

          date                time_diff
      0   2011-01-01 00:00:00       NaN
      1   2011-01-01 01:00:00    3600.0
      2   2011-01-01 02:00:00    3600.0
      3   2011-01-01 03:00:00    3600.0
      4   2011-01-01 04:00:00    3600.0
      5   2011-01-01 05:00:00    3600.0
      6   2011-01-01 06:00:00    3600.0
      7   2011-01-01 07:00:00    3600.0
      8   2011-01-01 08:00:00    3600.0
      9   2011-01-01 09:00:00    3600.0
      

      result:

      [(Timestamp('2011-01-01 00:00:00'), Timestamp('2011-01-01 01:00:00'), 3600.0),
       (Timestamp('2011-01-01 01:00:00'), Timestamp('2011-01-01 02:00:00'), 3600.0),
       (Timestamp('2011-01-01 02:00:00'), Timestamp('2011-01-01 03:00:00'), 3600.0),
       (Timestamp('2011-01-01 03:00:00'), Timestamp('2011-01-01 04:00:00'), 3600.0),
       (Timestamp('2011-01-01 04:00:00'), Timestamp('2011-01-01 05:00:00'), 3600.0),
       (Timestamp('2011-01-01 05:00:00'), Timestamp('2011-01-01 06:00:00'), 3600.0),
       (Timestamp('2011-01-01 06:00:00'), Timestamp('2011-01-01 07:00:00'), 3600.0),
       (Timestamp('2011-01-01 07:00:00'), Timestamp('2011-01-01 08:00:00'), 3600.0),
       (Timestamp('2011-01-01 08:00:00'), Timestamp('2011-01-01 09:00:00'), 3600.0)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多