python - 在 Python 中计算每天、每小时和每分钟的操作数的最佳方法是什么
问题描述
我的输入time
看起来像这样:(它是一个巨大的数据集(在 gb 中)我从另一个代码中获得)每一行都是单个值而不是两个不同的列。
2021-01-14 09:55:00
2021-01-14 09:56:54
2021-01-14 09:57:10
2021-01-14 07:51:13
2021-01-14 07:57:13
2021-01-14 08:49:41
2021-01-14 08:49:41
2021-01-08 08:53:34
2021-01-08 08:53:34
2021-01-08 08:53:34
2021-01-08 08:53:34
2021-01-08 08:53:34
2021-01-08 08:53:34
2021-01-08 07:52:18
2021-01-08 07:52:18
2021-01-08 07:52:18
2021-01-09 07:56:54
2021-01-09 07:56:54
2021-01-09 07:56:54
2021-01-09 09:52:17
2021-01-09 09:52:17
2021-01-09 09:52:17
2021-01-13 07:55:54
2021-01-13 07:49:12
2021-01-13 07:49:12
2021-01-10 07:55:00
2021-01-10 07:56:20
2021-01-10 07:53:22
任务是计算每天、 每小时和每分钟的操作次数,但仅限前 2 天。(已经完成了)
Date Entries
2021-01-14 7
2021-01-08 9
像这样的东西,这是一天和一小时。
Date Hour Entries
2021-01-14 7 2
2021-01-14 8 2
2021-01-14 9 3
2021-01-08 7 3
2021-01-08 10 2
2021-01-08 11 4
2021-01-08 18 5
日、时、分将如下所示
Date Hour Minutes Entries
2021-01-14 5 1 10
2021-01-14 5 50 5
2021-01-14 6 2 2
2021-01-14 7 3 5
2021-01-14 8 13 6
2021-01-14 8 22 4
2021-01-14 10 4 3
2021-01-14 11 5 10
我不会在这里分享以前的代码,因为我认为数据的生成方式无关紧要。
我正在使用 Pandas 数据框来处理这个。
解决方案
为了比较,我创建了由日期填充的帮助列Series.dt.date
,然后对于最小和最大日期时间Series.agg
与过滤器一起使用Series.isin
:
df['date1'] = df['date'].dt.date
dates = df['date1'].agg(['min','max'])
df1 = df[df['date1'].isin(dates)]
print (df1)
date date1
0 2021-01-14 09:55:00 2021-01-14
1 2021-01-14 09:56:54 2021-01-14
2 2021-01-14 09:57:10 2021-01-14
3 2021-01-14 07:51:13 2021-01-14
4 2021-01-14 07:57:13 2021-01-14
5 2021-01-14 08:49:41 2021-01-14
6 2021-01-14 08:49:41 2021-01-14
7 2021-01-08 08:53:34 2021-01-08
8 2021-01-08 08:53:34 2021-01-08
9 2021-01-08 08:53:34 2021-01-08
10 2021-01-08 08:53:34 2021-01-08
11 2021-01-08 08:53:34 2021-01-08
12 2021-01-08 08:53:34 2021-01-08
13 2021-01-08 07:52:18 2021-01-08
14 2021-01-08 07:52:18 2021-01-08
15 2021-01-08 07:52:18 2021-01-08
并且使用计数GroupBy.size
:
df2 = df1.groupby('date1').size().reset_index(name='count')
print (df2)
date1 count
0 2021-01-08 9
1 2021-01-14 7
添加Series.dt.hour
然后
Series.dt.minute
:
df3 = df1.groupby(['date1',
df['date'].dt.hour.rename('Hour')]).size().reset_index(name='count')
print (df3)
date1 Hour count
0 2021-01-08 7 3
1 2021-01-08 8 6
2 2021-01-14 7 2
3 2021-01-14 8 2
4 2021-01-14 9 3
df4 = df1.groupby(['date1',
df['date'].dt.hour.rename('Hour'),
df['date'].dt.minute.rename('Minutes')]).size().reset_index(name='count')
print (df4)
date1 Hour Minutes count
0 2021-01-08 7 52 3
1 2021-01-08 8 53 6
2 2021-01-14 7 51 1
3 2021-01-14 7 57 1
4 2021-01-14 8 49 2
5 2021-01-14 9 55 1
6 2021-01-14 9 56 1
7 2021-01-14 9 57 1
推荐阅读
- node.js - 如何使用 Supbase 向另一个身份验证提供程序进行身份验证?
- clojure - 为什么 (map (fn [f] (f 0)) `(inc)) 在 Clojure 中返回 (nil)
- powershell - 读取主机 PowerShell 中的输出变量属性值
- java - 如何解决 thingsboard 边缘 UI 问题?
- openedge - 进度 4GL - 是否为重复加载 .df 固定了表的 CRC 值?
- asp.net-core - NetCore:无法映射多个 SPA
- image - 使用 ffmpeg 从网络源中高效提取帧
- python - 在python中为docx实现键盘
- javascript - 初始 blob 正在播放,第二个 blob 未播放
- vba - 如果附件不是 PDF 或没有任何附件,则对电子邮件进行排序