Pandas 按时间间隔(5 分钟、10 分钟、1 天、1 年)分组并计算条目数量

我有一个简单的熊猫数据框,每天大约有 10000 到 20000 个条目。此数据框包含一个点和一个日期时间 (datetime64)。例如,它看起来像这样:


        point   timestamp_local

0       A       2018-09-29 00:00:20

1       A       2018-09-29 00:04:34

2       A       2018-09-29 00:06:59

3       B       2018-09-29 00:11:09

4       B       2018-09-29 01:19:28

...     ...     ...

24282   B       2018-09-29 21:40:26

24283   C       2018-09-29 21:40:31

24284   C       2018-09-29 21:45:17

24285   A       2018-09-29 22:20:29

24286   B       2018-09-29 22:28:08

我现在要得到的是一个数据框,它按点和我想指定的间隔对上面的数据框进行分组,并且还计算间隔的每个点的条目数量。此外,间隔应该是例如 5 分钟。间隔,10分钟。间隔或每天、每月或每年的 1 个间隔。


到目前为止,这是我对间隔进行分段的结果:


df['10min_period'] = df.apply(lambda x: "period_%d"%(int(x[1].minute/10) + 1), axis=1)

这将返回:


    point   timestamp_local         10min_period

0   A       2018-09-29 00:00:20     period_1

1   B       2018-09-29 00:04:34     period_1

2   B       2018-09-29 00:06:59     period_1

3   C       2018-09-29 00:11:09     period_2

4   C       2018-09-29 01:19:28     period_2

这计算了时期:


df = df.groupby([df['point'], df['10min_period']]).agg(['count'])

这将返回以下数据框:


                           timestamp_local

point   10min_period       count

A       period_1           2092

        period_2           2437

        period_3           2181

        period_4           2525

        period_5           2325

        period_6           2317

B       period_1           1814

        period_2           1719

        period_3           1732

        period_4           1575

        period_5           1789

        period_6           1781

...     ...                ...

但这并不是我想要的。原因是期间行条目错误。我的代码以独立于年、月、日和小时的10 分钟间隔对时间段进行了分段。这正是我不想要的!


我想要一个按我指定的时间间隔分段的日期框架,例如 5 分钟。, 10 min., 1 day, 1 year 等等但考虑年、月、日、小时和分钟!(看看这些句点是如何命名的!)

以这种方式命名时间段非常重要,所以我知道条目包含哪一天和时间间隔。我怎样才能做到这一点?例如,如果它是 5 分钟的间隔,则该时间段应命名为,period_2018-09-29_00:00:00依此类推。period_2018-09-29_00:05:00period_2018-09-29_00:25:00


小怪兽爱吃肉
浏览 366回答 1
1回答

慕莱坞森

您是否正在寻找这样的东西,间隔很短:df.groupby(['point',df.timestamp_local.dt.floor('5Min')]).size()这个,对于月/年df.groupby(['point', df.timestamp_local.dt.to_period('M')]).size()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python