我有以下数据

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


目标是对user_id进行分组,并计算每个用户的total_sessionstotal_views以及因此的average views per session

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_idyoutube_id
如何进行division获取average_view_per_session


上面的方法给出了一个关键错误,该错误可能是由于将原始列名称用于聚合列而引起的。

最佳答案

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

怎么样(完整示例)

import pandas as pd

data = '''\
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'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')

df = df.groupby('user_id').agg({'session_id': 'nunique', 'youtube_id': 'count'})
df.columns = ['total sessions','total views']

df['average view per session'] = df['total views']/df['total sessions']

print(df)


返回值:

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

关于python - Pandas groupby并汇总两列各自的总计,然后计算比率-汇总,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50243181/

10-09 15:52
查看更多