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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:54:27