首页 > 解决方案 > 在 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 数据框来处理这个。

标签: pythonpandasdataframe

解决方案


为了比较,我创建了由日期填充的帮助列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

推荐阅读