如何按用户ID聚合数据集 拆分Color、Food唯一值生成Yes/No新列
数据集行列转换(按用户聚合并生成分类属性列)实现方案
你需要的是将长表按用户唯一ID、Name分组后,对Color、Food两个分类字段做独热编码,最终输出每个用户一行、每个分类值对应一个Yes/No标识列的宽表,以下是两种常用场景的实现方式:
Python Pandas 实现
适合处理本地文件类数据集,支持动态识别所有分类值,不需要手动写死枚举项:
import pandas as pd # 读入你的数据集,示例中为构造的测试数据,实际使用可替换为 pd.read_csv("你的文件路径") df = pd.DataFrame([ [1, 'John', 'Blue', 'Pizza'], [1, 'John', 'Red', 'Pizza'], [1, 'John', 'Yellow', 'Pizza'], [1, 'John', 'Blue', 'Ice Cream'], [1, 'John', 'Red', 'Ice Cream'], [1, 'John', 'Yellow', 'Ice Cream'], [2, 'Kelly', 'Blue', 'Pizza'], [2, 'Kelly', 'Red', 'Pizza'] ], columns=['ID', 'Name', 'Color', 'Food']) # 生成独热编码、替换值为Yes/No、按用户主键聚合 result = pd.get_dummies(df, columns=['Color', 'Food'], prefix_sep='_') \ .replace({True: 'Yes', False: 'No'}) \ .groupby(['ID', 'Name'], as_index=False) \ .max() # 输出结果或者导出为csv print(result) # result.to_csv("转换后结果.csv", index=False)
SQL 实现(以MySQL为例)
适合数据存储在数据库中的场景,如果你需要动态生成列不需要硬写枚举值,可以结合数据库的动态SQL语法实现:
SELECT ID, Name, IF(MAX(Color = 'Blue'), 'Yes', 'No') AS Color_Blue, IF(MAX(Color = 'Red'), 'Yes', 'No') AS Color_Red, IF(MAX(Color = 'Yellow'), 'Yes', 'No') AS Color_Yellow, IF(MAX(Food = 'Pizza'), 'Yes', 'No') AS Food_Pizza, IF(MAX(Food = 'Ice Cream'), 'Yes', 'No') AS `Food_Ice Cream` FROM 你的表名 GROUP BY ID, Name;
内容的提问来源于stack exchange,提问作者manaso12
相关产品推荐
相关产品推荐

