【问题标题】:How to calculate the click-through rate如何计算点击率
【发布时间】:2016-04-08 18:04:02
【问题描述】:

这是一个例子,我有这个数据;

    datetime    keyword COUNT
0   2016-01-05  a_click 100
1   2016-01-05  a_pv    200
2   2016-01-05  b_pv    150
3   2016-01-05  b_click 90
4   2016-01-05  c_pv    120
5   2016-01-05  c_click 90

我想把它转换成这个数据

    datetime    keyword ctr
0   2016-01-05  a       0.5
1   2016-01-05  b       0.6
2   2016-01-05  c       0.75

我可以用脏代码转换数据,但我想以优雅的方式来做。

【问题讨论】:

    标签: python numpy pandas machine-learning data-analysis


    【解决方案1】:

    你可以:

    df['action'] = df.keyword.str.split('_').str.get(-1)
    df['keyword'] = df.keyword.str.split('_').str.get(0)
    df = df.set_index(['datetime', 'keyword', 'action']).unstack().loc[:, 'COUNT']
    df['ctr'] = df.click.div(df.pv)
    
    
    action              click   pv   ctr
    datetime   keyword                  
    2016-01-05 a          100  200  0.50
               b           90  150  0.60
               c           90  120  0.75
    

    【讨论】:

    • 哇,set_indexunstack 我以前没用过!这太棒了:) 通过添加df.reset_index(),我可以获得我想要的结构!非常感谢
    【解决方案2】:

    使用groupby的替代方法:

    df2['key_word'] = df2.apply(lambda x: x.keyword.split('_')[0], axis=1)
    df2['key_action'] = df2.apply(lambda x: x.keyword.split('_')[1], axis=1)
    
    
    def compute_ctr(g):
        ctr = g[g.key_action == 'click'].COUNT.values[0] / g[g.key_action == 'pv'].COUNT.values[0]
        result = {'datetime': g.iloc[0,0], 'ctr': ctr}
        return pd.Series(result)
    
    
    rslt = df2.groupby('key_word').apply(compute_ctr)
    rslt.reset_index(inplace=True, drop=False)
    print(rslt)
    
    
        ctr  datetime keyword
    0   0.5  5/1/2016       a
    1   0.6  5/1/2016       b
    2  0.75  5/1/2016       c
    

    【讨论】:

      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 2021-09-25
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多