首页 > 解决方案 > Python 每天按分钟分组

问题描述

我有跨越 30 天的日志数据。我希望对数据进行分组,以查看 15 分钟窗口在 24 小时内的事件总数最少。数据格式如下:

2021-04-26 19:12:03,上传
2021-04-26 11:32:03,下载
2021-04-24 19:14:03,下载
2021-04-22 1:9:03,下载
2021- 04-19 4:12:03,上传
2021-04-07 7:12:03,下载

我正在寻找类似的结果

19:15:00, 2
11:55:00, 1
7:15:00, 1
4:15:00, 1
1:15:00, 1

目前,我使用石斑鱼:

df['date'] = pd.to_datetime(df['date'])
df.groupby(pd.Grouper(key="date",freq='.25H')).Host.count()

我的结果看起来像\

date
2021-04-08 16:15:00+00:00     1
2021-04-08 16:30:00+00:00    20
2021-04-08 16:45:00+00:00     6
2021-04-08 17:00:00+00:00     6
2021-04-08 17:15:00+00:00     0
                             ..
2021-04-29 18:00:00+00:00     3
2021-04-29 18:15:00+00:00     9
2021-04-29 18:30:00+00:00     0
2021-04-29 18:45:00+00:00     3
2021-04-29 19:00:00+00:00    15

有什么办法让我不能只在时间上再次合并而不包括日期吗?

标签: pythonpandasdataframegroupinganalytics

解决方案


你想要这样的东西吗?

在这里,想法是 - 如果您不关心日期,那么您可以用某个随机日期替换所有日期,然后您可以仅根据时间数据对数据进行分组/计数。

df.Host = 1 
df.date = df.date.str.replace( r'(\d{4}-\d{1,2}-\d{1,2})','2021-04-26', regex=True)
df.date = pd.to_datetime(df.date)
new_df = df.groupby(pd.Grouper(key='date',freq='.25H')).agg({'Host' : sum}).reset_index()
new_df = new_df.loc[new_df['Host']!=0]
new_df['date'] = new_df['date'].dt.time


推荐阅读