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

Pandas如何将用户偏好表转换为全项二进制标记DataFrame

实现代码

首先构造示例数据:

import pandas as pd

# 原始数据构造
df = pd.DataFrame({
    'user': ['Alex', 'Alex', 'Alex', 'Peter', 'Peter', 'Peter', 'John'],
    'preference': ['tea', 'cookie', 'apple', 'coffee', 'apple', 'banana', 'tea']
})

方法1:笛卡尔积左连接(逻辑更易理解)

# 提取所有唯一用户和唯一偏好
all_users = df['user'].unique()
all_prefs = df['preference'].unique()

# 生成用户+偏好的全量组合
full_combo = pd.MultiIndex.from_product([all_users, all_prefs], names=['user', 'preference']).to_frame(index=False)

# 原数据标记存在的偏好值为1
df['value'] = 1

# 左连接匹配存在的偏好,缺失值填充为0
result = full_combo.merge(df, on=['user', 'preference'], how='left').fillna(0).astype({'value': int})

# 按用户排序(可选,和示例输出顺序一致)
result = result.sort_values('user', ignore_index=True)

方法2:交叉表转换(代码更简洁)

直接用crosstab统计用户-偏好的出现频次,再转为长格式即可:

result = pd.crosstab(df['user'], df['preference']).reset_index().melt(id_vars='user', value_name='value')

输出的result就是你需要的结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:09:02