Python 按分组,将两列分别汇总,然后计算比率-汇总汇总

Python 按分组,将两列分别汇总,然后计算比率-汇总汇总,python,pandas,aggregate,pandas-groupby,summary,Python,Pandas,Aggregate,Pandas Groupby,Summary,我有以下数据 user_id session_id youtube_id 1 1 2342 1 1 3523 1 2 3325 2 1 3423 2 1 2352 2 1 3333 2 2

我有以下数据

user_id   session_id    youtube_id 
1           1             2342 
1           1             3523
1           2             3325
2           1             3423
2           1             2352
2           1             3333 
2           2             2351
2           2             9876
2           3             2388
目标是按
用户id
分组,计算每个用户的
总会话数
总视图数
,从而计算每个会话的平均视图数

user_id, total_sessions, total_views, average_view_per_session
1,         2,            3,           1.5
2,         3,            6,           2    

 result_df['avg'] = df.groupby('user_id').agg({
     'session_id':lambda x : x.nunique(),
     'youtube_id': 'count'}).apply(lambda x : x['total_views']/x['total_sessions']
以上两个问题:

  • 结果列仍然命名为
    session\u id
    youtube\u id
    ,尽管它们是聚合
  • 如何执行
    分区
    以获得每个会话的
    平均视图

    上述方法给出了一个键错误,这可能是由于对聚合列使用原始列名造成的

    由于它们相互依赖,我们可以在应用.agg()后将其添加到单独的代码行中

    这个怎么样(完整示例

    返回:

             total sessions  total views  average view per session
    user_id                                                       
    1                     2            3                       1.5
    2                     3            6                       2.0
    

    io导入StringIO中缺少
    @smci谢谢,但实际上没有必要。出于演示目的,我们一直在使用
    pd.compat.StringIO()
    。它应该适用于py2和py3。你是说“一个新列”而不是“行”?@smci我指的是一个新行(就像在一行新代码中一样)。这实在是牵强。已编辑,谢谢。是时候整理哪种导入了:从聚合中重命名列,以便您希望聚合以获得相应的总计,然后获取它们的比率以获得平均值,即“汇总”您的摘要。我试着改写以使这更清楚。
             total sessions  total views  average view per session
    user_id                                                       
    1                     2            3                       1.5
    2                     3            6                       2.0