我有一个简单的熊猫数据框,每天大约有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分钟,1天,1年等等,但会考虑年,月,日,小时和分钟! (看看句点如何命名!)
I give you an example of what I want:
point timestamp_local 10min_period
0 A 2018-09-29 00:00:20 period_2018-09-29_00:00:00
1 B 2018-09-29 00:04:34 period_2018-09-29_00:00:00
2 B 2018-09-29 00:06:59 period_2018-09-29_00:00:00
3 C 2018-09-29 00:11:09 period_2018-09-29_00:10:00
4 C 2018-09-29 00:19:28 period_2018-09-29_00:10:00
5 A 2018-09-29 00:00:20 period_2018-09-29_00:00:00
6 B 2018-09-30 01:04:34 period_2018-09-30_01:00:00
7 B 2018-09-30 00:06:59 period_2018-09-30_00:00:00
8 C 2018-10-29 02:15:09 period_2018-10-29_02:15:00
9 C 2019-09-29 01:19:28 period_2019-09-29_01:10:00
以这种方式命名期间非常重要,因此我知道条目包含的日期和间隔。我怎样才能做到这一点?例如,如果间隔为5分钟,则该时间段应命名为period_2018-09-29_00:00:00
,period_2018-09-29_00:05:00
和period_2018-09-29_00:25:00
,依此类推。
非常感谢您!
答案 0 :(得分:1)
您是否正在寻找这样的东西,每隔几分钟:
df.groupby(['point',df.timestamp_local.dt.floor('5Min')]).size()
这个,每月/每年
df.groupby(['point', df.timestamp_local.dt.to_period('M')]).size()