R语言如何将数据框列值转为列名 生成ID唯一的0-1宽表
Pandas实现ID去重+购物清单多热编码转换
你需要的是对重复ID做去重,同时把购物清单字段拆成独立的商品列,对应ID购买过该商品标记为1、没买过标记为0,用pandas可以快速实现,以下是可直接运行的代码:
方法1:crosstab交叉表实现(最简洁)
这个方法逻辑最直接,统计每个ID对应各商品的出现次数,再将计数统一转换为0/1标记即可:
import pandas as pd # 已存在数据框A可跳过这段示例数据创建代码 A = pd.DataFrame({ 'ID': [1, 1, 1, 2, 2, 3, 4], 'shopping list': ['carrot', 'milk', 'apple', 'milk', 'chicken', 'milk', 'carrot'] }) # 生成目标数据框B B = pd.crosstab(index=A['ID'], columns=A['shopping list']).reset_index() # 若存在同一ID多次购买同一商品的情况,将大于1的计数统一截断为1 B = B.clip(upper=1) # 如需固定列顺序和示例完全一致,可执行以下重排代码 # B = B[['ID', 'milk', 'carrot', 'apple', 'chicken']]
方法2:哑变量编码+分组聚合(适合自定义扩展)
如果后续需要增加聚合规则,可以用哑变量编码后按ID分组求和的方式实现,效果完全一致:
B = pd.get_dummies( A, columns=['shopping list'], prefix='', prefix_sep='' ).groupby('ID', as_index=False).sum().clip(upper=1)
运行后得到的B结构和你给出的目标样例完全匹配。
内容的提问来源于stack exchange,提问作者pnd123
相关产品推荐
相关产品推荐

