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

如何在Pandas DataFrame中计算用户歌曲收听频率(推荐系统)

计算用户歌曲收听频率的Pandas实现

核心逻辑

要得到每个用户对单首歌的收听频率,只需两步:

  1. 按user_id分组,计算每个用户的总收听次数
  2. 将总收听次数与原数据合并,用单首歌的listen_count除以用户总收听次数得到频率

分步代码实现

  1. 计算用户总收听次数
# 按user_id分组求和,得到每个用户的总收听次数
user_total_listens = df.groupby('user_id')['listen_count'].sum().reset_index(name='total_listens')
  1. 合并原数据与总收听次数
# 左连接合并,保留原DataFrame的所有行数据
df_with_total = df.merge(user_total_listens, on='user_id', how='left')
  1. 计算收听频率
# 计算每首歌的收听频率
df_with_total['listen_frequency'] = df_with_total['listen_count'] / df_with_total['total_listens']

边界情况处理(可选)

如果存在用户总收听次数为0的极端情况,可添加判断避免除零错误:

df_with_total['listen_frequency'] = df_with_total.apply(
    lambda row: row['listen_count'] / row['total_listens'] if row['total_listens'] != 0 else 0,
    axis=1
)

完整示例

import pandas as pd

# 构造样例数据
data = {
    'user_id': [1, 1, 2, 2, 2],
    'title': ['歌曲A', '歌曲B', '歌曲A', '歌曲C', '歌曲C'],
    'listen_count': [5, 3, 2, 4, 2]
}
df = pd.DataFrame(data)

# 完整计算流程
user_total_listens = df.groupby('user_id')['listen_count'].sum().reset_index(name='total_listens')
df_with_total = df.merge(user_total_listens, on='user_id', how='left')
df_with_total['listen_frequency'] = df_with_total['listen_count'] / df_with_total['total_listens']

# 打印结果
print(df_with_total)

运行后输出:
user_id title listen_count total_listens listen_frequency
0 1 歌曲A 5 8 0.6250
1 1 歌曲B 3 8 0.3750
2 2 歌曲A 2 8 0.2500
3 2 歌曲C 4 8 0.5000
4 2 歌曲C 2 8 0.2500

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:32