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

如何将DataFrame中含n个分类的列转换为n个二元值列?

实现方案

你要的分类转二元01列的需求完全不需要自行编写遍历逻辑实现,pivot_table可以满足需求,同时pandas还有更适配这个场景的内置函数pd.get_dummies(独热编码)可以更简单的完成转换。

方法1:使用pd.get_dummies(推荐,代码最简洁)

这个方法是pandas专门为分类变量转独热编码设计的API,性能和易用性都最优:

import pandas as pd

# 示例数据构造
df = pd.DataFrame({
    'id': [1,2,10],
    'gender': ['M','F','F'],
    'name': ['John','Mary','Kate'],
    'status': ['Withdrawn','Pass','Fail']
})

# 核心转换逻辑
result = pd.concat(
    [df.drop(columns='status'), pd.get_dummies(df['status']).astype(int)],
    axis=1
)

方法2:使用pivot_table实现

如果你需要同时做其他聚合运算,可以用你提到的pivot_table完成:

# 先添加计数列用于聚合
df['tag'] = 1

result = df.pivot_table(
    index=['id', 'gender', 'name'], # 把除了status之外的所有列作为分组索引
    columns='status',
    values='tag',
    fill_value=0, # 没有匹配到的分类填充为0
    aggfunc='sum'
).reset_index() # 把分组索引转回普通列
result.columns.name = None # 去掉自动生成的status列名前缀

两种方法输出的结果都完全符合你要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:02