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

如何用Pandas自动添加未评分的用户-音乐组合行并设has_rating为0

Pandas生成用户与音乐的全组合并补充缺失评分行

需求说明

给定包含用户、音乐及已有评分标记的DataFrame,需要生成所有用户与音乐的笛卡尔积组合,原有组合保留原评分值,新增组合的评分标记设为0。

实现方法

方法一:生成全组合后左连接

  1. 构造原始数据
import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'user_id': ['A', 'B'],
    'music_id': ['a', 'b'],
    'has_rating': [1, 1]
})
  1. 生成所有用户-音乐组合
    提取唯一的用户和音乐列表,用from_product生成全组合:
# 获取唯一用户和音乐集合
unique_users = df['user_id'].unique()
unique_musics = df['music_id'].unique()

# 生成所有可能的组合
all_pairs = pd.MultiIndex.from_product(
    [unique_users, unique_musics],
    names=['user_id', 'music_id']
).to_frame(index=False)
  1. 合并原始数据并填充缺失值
    通过左连接将原始评分匹配到全组合中,缺失的评分用0填充:
# 左连接匹配原始数据,填充缺失值
final_df = all_pairs.merge(df, on=['user_id', 'music_id'], how='left')
final_df['has_rating'] = final_df['has_rating'].fillna(0).astype(int)

方法二:用透视表快速实现

利用pivot_table一步完成透视、填充、转置操作,代码更简洁:

final_df = df.pivot_table(
    index='user_id',
    columns='music_id',
    values='has_rating',
    fill_value=0
).stack().reset_index(name='has_rating')

最终结果

执行上述代码后,得到的final_df如下:

user_idmusic_idhas_rating
Aa1
Ab0
Ba0
Bb1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:01:12