【问题标题】:pandas dataframe click through rate calculation熊猫数据框点击率计算
【发布时间】:2016-05-20 04:53:20
【问题描述】:

我有一个格式为

的数据框
                           variantid eventType
date
2016-02-08 14:43:42  variant1    served
2016-02-08 14:43:46  variant1    served
2016-02-08 14:43:47  variant1    served
2016-02-08 14:43:51  variant1    served
2016-02-08 14:43:53  variant1    served
2016-02-08 14:43:54  variant1    served
2016-02-08 14:43:55  variant1    served
2016-02-08 14:43:55  variant2    served
2016-02-08 14:43:56  variant2    served
2016-02-08 14:43:56  variant1    served

我已按日期对其进行了索引。我现在想对variantid 列中的每个唯一值进行点击率计算。我对熊猫很陌生,不知道如何实现这一点。如果我进行以下操作

grouped_by_varid=df.groupby(by=[df.variantid,df.index.hour]).count()

我得到以下数据框

                eventType
variantid
variant1    0           3
            1           3
            3           1
            4           1
            5           4
            6           3
            7           5
            8           9
            9           9
            10         12
            14       5846
            15      26712
            16      25614
            17      19579
            18      14328
            19       2984
            20         39
            21         32
            22         15
            23         12

variant2    0           3
            1           1
            2           4
            3           3
            4           8
            5          14
            6          24
            7          21
            8          27
            9           9
            10          9
            14       4947
            15      21299
            16      19475
            17      13292
            18       9398
            19       2172
            20         66
            21         64
            22         44
            23         12

我想生成一个数据框,用于计算和存储每个变体每小时的点击率(也是每分钟,但我觉得这将是一个微小的变化)。

我还注意到,由于 eventType 列中的值是字符串,如果我进行求和,它会简单地连接这些值,那么我将如何使用这些字符串 eventTypes 计算每个变量的聚合统计信息。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas group-by dataframe time-series


    【解决方案1】:

    IIUC 你可以使用groupby 和聚合sizereset_index 和最后一个rename

    print df
                        variantid eventType
    date                                   
    2016-02-08 14:43:42  variant1    served
    2016-02-08 14:43:46  variant1    served
    2016-02-08 14:43:47  variant1    served
    2016-02-08 14:43:51  variant1    served
    2016-02-08 14:43:53  variant1    served
    2016-02-08 14:43:54  variant1    served
    2016-02-08 14:43:55  variant1    served
    2016-02-08 14:43:55  variant2    served
    2016-02-08 14:43:56  variant2    served
    2016-02-08 14:43:56  variant1    served
    
    print df.groupby(by=[df.variantid,df.index.hour])['eventType'].size()
                                   .reset_index(name='count').rename(columns={'level_1':'hours'})
      variantid  hours  count
    0  variant1     14      8
    1  variant2     14      2
    
    print df.groupby(by=[df.variantid,df.index.minute])['eventType'].size()
                                 .reset_index(name='count').rename(columns={'level_1':'minutes'})
      variantid  minutes  count
    0  variant1       43      8
    1  variant2       43      2
    

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2015-01-28
      • 2021-07-22
      • 2017-04-11
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2018-08-14
      相关资源
      最近更新 更多