首页 > 解决方案 > 按天计算跳出率

问题描述

这似乎是一项非常容易的任务,但我已经为此苦苦挣扎了一段时间。

我想计算每天(PageView==1 的会话数)/(会话总数),示例数据如下

session_df

Date/Timestamp  Session ID  PageViews
2/14/2016          a           1
2/14/2016          b           5
2/14/2016          c           8
3/23/2016          d           1
3/23/2016          e           1
3/23/2016          f           2

和预期的输出:

Date/Timestamp  BounceRate
2/14/2016       0.333333333
3/23/2016       0.666666667

我尝试先Bounced?根据PageViews数量添加一列,然后groupby并计算百分比,然后我需要过滤掉bounced?==False非常麻烦的。如果有人可以提出更好的方法来做到这一点,那就太好了!

sessions_df['Bounced?'] = sessions_df['PageViews']>1
dt = pd.DatetimeIndex(sessions_df['Date/Timestamp'])
daily_session_bounce_rate = sessions_df.groupby([dt.date, 'Bounced?']).agg({'Session ID':'count'})

daily_session_bounce_rate = daily_session_bounce_rate.groupby(level=0).apply(lambda x: x / float(x.sum()))
daily_session_bounce_rate
# this is my output
           Bounced? Session ID
2016-01-01  False   0.459893
            True    0.540107


#filter data
daily_session_bounce_rate.loc[daily_session_bounce_rate['Bounced?']==True,['level_0','Session ID']]

标签: pythonpandas

解决方案


您不需要定义单独的Bounced?列。取count分组的行,PageViews==1除以该日期的所有行数以获得分数

daily_session_bounce_rate = \
    df[df['PageViews']==1].groupby('Date/Timestamp').agg({'Session ID':'count'}) /\
    df.groupby('Date/Timestamp').agg({'Session ID':'count'})

推荐阅读