我有以下数据
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_sessions
,total_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_id
和youtube_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/