计算按天分组的时间戳的差异
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
我有一个由日期时间条目组成的 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