2016-02-10 96 views
1

我有一个数据帧是我的日期索引它形式大熊猫数据帧通过率计算点击

      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列中的值是字符串,如果我做一个总和,它简单地连接了值,那么我将如何计算使用这些字符串eventType每人S变种汇总统计。

任何帮助将不胜感激。

回答

0

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 
+0

它是如何工作的? – jezrael