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
相关产品推荐
相关产品推荐

