迭代 Pandas 数据框上的唯一日期

Posted

技术标签:

【中文标题】迭代 Pandas 数据框上的唯一日期【英文标题】:Iterate over unique dates on a Pandas dataframe 【发布时间】: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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于迭代 Pandas 数据框上的唯一日期的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 迭代地将列添加到数据框中

Pandas - 两个日期之间的月数

迭代 Pandas 分组数据框

迭代列表以创建数据框输出 Pandas

迭代 Pandas 数据框的最佳方法?

使用多索引迭代地连接 pandas 数据帧