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

将类别列转换为二进制列并合并至DataFrame的技术需求

按ID分组将类别列转换为二进制标记列

需求是把DataFrame中的category列按id维度转换为二进制列:每个类别作为新列,对应id包含该类别则标记1,否则标记0,最终输出按id唯一值展示的结果。

原始数据

import pandas as pd

df = pd.DataFrame({
    "id": [0,1,1,3,3],
    "value1": ["ryan", "delta", "delta", "delta", "alpha"], 
    "category": ["teacher", "pilot", "engineer", "pilot", "teacher"], 
    "value2": [1, 1, 2, 3, 7]
})

解决方案

最简洁的实现方式是结合get_dummies生成哑变量,再按id分组取最大值:

# 生成category列的哑变量
dummies = pd.get_dummies(df['category'])
# 合并id列和哑变量列
df_combined = pd.concat([df[['id']], dummies], axis=1)
# 按id分组取最大值(同一id下有该类别则保留1,无则0)
finaldf = df_combined.groupby('id').max().reset_index()

也可以用pivot_table实现,逻辑更直观:

finaldf = df.pivot_table(
    index='id',
    columns='category',
    aggfunc=lambda x: 1 if x.any() else 0,
    fill_value=0
).reset_index()
# 整理列名,去掉层级结构
finaldf.columns = ['id'] + list(finaldf.columns.get_level_values(1)[1:])

输出结果

执行后得到的finaldf与预期一致:

print(finaldf)
#    id  engineer  pilot  teacher
# 0   0         0      0        1
# 1   1         1      1        0
# 2   3         0      1        1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:35:34