PythonPandas,按时间间隔分组

2024-04-16 10:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

具有以下特征:

group_id                timestamp
       A  2020-09-29 06:00:00 UTC
       A  2020-09-29 08:00:00 UTC
       A  2020-09-30 09:00:00 UTC
       B  2020-09-01 04:00:00 UTC
       B  2020-09-01 06:00:00 UTC

我希望使用所有组计算记录之间的增量,而不是计算组之间的增量。上述示例的结果:

delta       count
    2           2
   25           1

说明:A组的三角洲为

06:00:00 -> 08:00:00 (2 hours)
08:00:00 -> 09:00:00 on the next day (25 hours)

B组:

04:00:00 -> 06:00:00 (2 hours)

如何使用Python实现这一点


Tags: theid示例oncount记录group特征
2条回答

使用^{}表示每组的差异,将秒转换为^{},将小时除以3600,最后一次计数值除以^{},将Series转换为2 columns DataFrame

df1 = (df.groupby("group_id")['timestamp']
        .diff()
        .dt.total_seconds()
        .div(3600)
        .value_counts()
        .rename_axis('delta')
        .reset_index(name='count'))
print (df1)
   delta  count
0    2.0      2
1   25.0      1

代码

df_out = df.groupby("group_id").diff().groupby("timestamp").size()

# convert to dataframe
df_out = df_out.to_frame().reset_index().rename(columns={"timestamp": "delta", 0: "count"})

结果

print(df_out)
            delta  count
0 0 days 02:00:00      2
1 1 days 01:00:00      1

groupby diff生成的NaT(缺少值)被自动忽略

要以小时表示timedelta,只需调用total_seconds()方法

df_out["delta"] = df_out["delta"].dt.total_seconds() / 3600

print(df_out)
   delta  count
0    2.0      2
1   25.0      1

相关问题 更多 >