计算按天分组的时间戳的差异

Calculating difference of timestamps grouped by day

我有一个由日期时间条目组成的 Pandas 系列。例如

timestamps = [datetime.datetime(2020, 7, 25, 22, 00), datetime.datetime(2020, 7, 25, 23, 55), datetime.datetime(2020, 7, 26, 7, 7), datetime.datetime(2020, 7, 26, 7, 30), datetime.datetime(2020, 7, 26, 12, 22)]
df = pd.Series(timestamps)

使用 df.dt.normalize().value_counts() 我可以打印每天的时间戳数。但是现在我还想输出每天时间戳的差异(以分钟为单位),例如

*** 2020, 7, 25 ***
115
*** 2020, 7, 26 ***
432
27
292

如何做到这一点?

您可以按日期分组并获得差异,然后使用 dt.total_seconds().div(60)

转换为分钟
out = (df.to_frame('DateTime').assign(Time_diff=df.groupby(df.dt.date).diff()
      .dt.total_seconds().div(60)))

             DateTime  Time_diff
0 2020-07-25 22:00:00        NaN
1 2020-07-25 23:55:00      115.0
2 2020-07-26 07:07:00        NaN
3 2020-07-26 07:30:00       23.0
4 2020-07-26 12:22:00      292.0

对于字典,您可以使用:

d = {i:g.diff().dt.total_seconds().div(60).dropna().tolist() 
  for i,g in df.groupby(df.dt.date)}

{datetime.date(2020, 7, 25): [115.0], datetime.date(2020, 7, 26): [23.0, 292.0]}

编辑:

根据评论,您可以在没有 groupby 的情况下遵循相同的逻辑:

df.dt.date.to_frame("Date").assign(Time_diff=df.diff().dt.total_seconds().div(60))
         Date  Time_diff
0  2020-07-25        NaN
1  2020-07-25      115.0
2  2020-07-26      432.0
3  2020-07-26       23.0
4  2020-07-26      292.0