【问题标题】:Iterate over unique dates on a Pandas dataframe迭代 Pandas 数据框上的唯一日期
【发布时间】:2020-10-29 19:58:43
【问题描述】:

我有一个这样的熊猫数据框

id        date      time    dif
01  2020-04-02  09:44:00
02  2020-04-02  09:50:23
03  2020-04-02  09:54:56
04  2020-04-03  10:24:42
05  2020-04-03  10:32:12
06  2020-04-03  11:12:21
...

我要做的是计算每一行与每天前一行之间的时间差(以分钟为单位)。所以结果应该是这样的

id        date      time    dif
01  2020-04-02  09:44:00      6
02  2020-04-02  09:50:23      4
03  2020-04-02  09:54:56
04  2020-04-03  10:24:42      7
05  2020-04-03  10:32:12     40
06  2020-04-03  11:12:21
...

我的第一个想法是创建一个包含日期列唯一值的列表并尝试了这个:

import pandas a dp
import numpy as np

...

dates = df.date.unique()

for d in dates:
  df['dif'] = round(df['time'].diff(-1).dt.total_seconds().div(60),0) * -1

但我认为这并不容易......

【问题讨论】:

    标签: python pandas loops dataframe date


    【解决方案1】:

    DataFrameGroupBy.diffSeries.dt.total_secondsSeries.round 一起使用:

    df['time'] = pd.to_timedelta(df['time'])
    
    df['dif'] = df.groupby('date')['time'].diff(-1).dt.total_seconds().div(60).round().mul(-1)
    

    或者使用DataFrameGroupBy.shift进行减法:

    df['dif'] = (df.groupby('date')['time'].shift(-1)
                   .sub(df['time'])
                   .dt.total_seconds()
                   .div(60)
                   .round())
    print (df)
       id        date     time   dif
    0   1  2020-04-02 09:44:00   6.0
    1   2  2020-04-02 09:50:23   5.0
    2   3  2020-04-02 09:54:56   NaN
    3   4  2020-04-03 10:24:42   8.0
    4   5  2020-04-03 10:32:12  40.0
    5   6  2020-04-03 11:12:21   NaN
    

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2021-02-26
      • 2018-10-01
      • 2015-02-12
      • 2020-10-08
      • 2019-10-08
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多