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

如何在Pandas pivot_table中计算点击用户占浏览用户的比率?

解决方案

方法一:先聚合再计算点击率

先通过透视表得到每个时段的总点击、总浏览用户数,再基于聚合结果计算点击率,这是最稳妥的方式,不会出现聚合错误:

# 生成包含总点击、总浏览的透视表(含margins总和)
pivot_summary = df.pivot_table(
    columns=['weekday'],
    index=['hour'],
    values=['users_who_clicked', 'users_who_viewed'],
    aggfunc='sum',
    fill_value=0,
    margins=True
)

# 计算点击率,处理除数为0的情况(替换为NaN避免报错)
click_rate = pivot_summary['users_who_clicked'] / pivot_summary['users_who_viewed'].replace(0, float('nan'))

# 重命名列名,提升可读性
click_rate.columns = [f"{day}_click_rate" for day in click_rate.columns]
click_rate.rename(columns={'All_click_rate': 'Total_click_rate'}, inplace=True)

# 查看结果
print(click_rate)

方法二:用groupby+unstack实现

如果更习惯用groupby,也可以先分组聚合,再转换为透视表格式,最后计算点击率:

# 按hour和weekday分组,求和点击、浏览数
grouped_data = df.groupby(['hour', 'weekday']).agg(
    total_clicked=('users_who_clicked', 'sum'),
    total_viewed=('users_who_viewed', 'sum')
).unstack(fill_value=0)

# 添加margins(行和列的总和)
grouped_data['All'] = grouped_data.sum(axis=1)
grouped_data.loc['All'] = grouped_data.sum(axis=0)

# 计算点击率
click_rate = grouped_data['total_clicked'] / grouped_data['total_viewed'].replace(0, float('nan'))

为什么之前的lambda方法会报错?

pivot_table的aggfunc是对每个单独的values列独立执行的,无法在lambda中同时操作两个字段。你之前尝试的lambda会被分别应用到users_who_clicked和users_who_viewed列上,自然会出现类型错误——因为它只能接收单个列的数值,没法同时处理两列做除法。

内容的提问来源于stack exchange,提问作者Matthew JJJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:29:55