【问题标题】:What is optimal way to count number of actions per every day, hour and minute in Python在 Python 中计算每天、每小时和每分钟的操作数的最佳方法是什么
【发布时间】:2021-03-05 14:40:16
【问题描述】:

我的输入是 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 数据框来处理这个。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    为了比较,我创建了由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
    

    and for count 使用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
    

    【讨论】:

    • @AdnanAli - 我添加了分钟和小时的输出,但它不同,有什么问题吗?
    • 我在真实数据集上实现并测试它,然后回复。这将需要一些时间。
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2016-08-27
    • 2020-03-22
    相关资源
    最近更新 更多