You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pandas分组聚合计算用户总会话数、总浏览量及平均浏览量

解决按用户分组统计会话数、浏览量及每会话平均浏览量的问题

我来帮你搞定这个分组统计的问题!你需要按user_id分组,计算总会话数(total_sessions,即每个用户的唯一会话ID数量)、总浏览量(total_views,即每个用户的youtube记录总数),再算出每会话平均浏览量,咱们一步步来修正代码并实现需求:

问题分析

你之前的代码尝试直接在聚合后用apply计算比值,但有个关键问题:聚合时没有给结果列指定正确的名称,导致后续引用x['total_views']会抛出KeyError。我们需要先通过命名聚合得到清晰的统计列,再计算平均值。

完整实现代码

import pandas as pd

# 先构造示例数据(如果你的df已经存在可以跳过这部分)
data = [
    [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.DataFrame(data, columns=['user_id', 'session_id', 'youtube_id'])

# 1. 分组聚合,得到总会话数和总浏览量
agg_df = df.groupby('user_id').agg(
    total_sessions=('session_id', 'nunique'),  # 统计每个用户的唯一会话数
    total_views=('youtube_id', 'count')        # 统计每个用户的总浏览记录数
)

# 2. 计算每会话平均浏览量
agg_df['average_view_per_session'] = agg_df['total_views'] / agg_df['total_sessions']

# 3. 可选:把user_id从索引转为列,方便输出成预期的格式
result_df = agg_df.reset_index()

# 查看结果
print(result_df)

运行结果

输出会完全符合你的预期:

user_id  total_sessions  total_views  average_view_per_session
0        1               2            3                       1.5
1        2               3            6                       2.0

关键细节说明

  • 使用agg()的命名聚合语法(pandas 0.25版本及以上支持),可以直接给聚合后的结果列指定我们需要的名称(total_sessions、total_views),避免后续引用时出现名称错误。
  • 计算平均值时,直接用列之间的除法即可,比apply更简洁高效。
  • 如果需要把结果导出为CSV格式,直接用result_df.to_csv('output.csv', index=False)就能得到你想要的逗号分隔格式。

内容的提问来源于stack exchange,提问作者add-semi-colons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:23:41