如何用Python将Pandas DataFrame行转列并以0/1标记匹配
实现Pandas DataFrame的camps列独热编码转换
先看示例原数据集的创建代码和内容:
import pandas as pd # 示例原数据集 data = { 'id': [1, 1, 2, 3, 3, 3], 'camps': ['camp_a', 'camp_b', 'camp_a', 'camp_b', 'camp_c', 'camp_a'] } df = pd.DataFrame(data)
原DataFrame内容:
id camps 0 1 camp_a 1 1 camp_b 2 2 camp_a 3 3 camp_b 4 3 camp_c 5 3 camp_a
下面提供两种实用的实现方法:
方法1:用pivot_table直接转换
通过分组计数的方式快速生成目标格式,自动填充0:
# 按id分组,统计每个camp的出现次数,填充0并转为整数 result = df.pivot_table(index='id', columns='camps', aggfunc='size', fill_value=0).astype(int) # 可选:把id从索引转回普通列 result = result.reset_index()
转换后结果:
camps id camp_a camp_b camp_c 0 1 1 1 0 1 2 1 0 0 2 3 1 1 1
方法2:get_dummies + groupby求和
先对camps列做独热编码,再按id汇总求和:
# 对camps列生成独热编码列 dummies = pd.get_dummies(df['camps']) # 合并id列后按id分组求和,转为整数 result = pd.concat([df['id'], dummies], axis=1).groupby('id').sum().astype(int).reset_index()
这个方法和方法1的输出完全一致,适合需要先对camps列做额外处理的场景。
内容的提问来源于stack exchange,提问作者SAJ
相关产品推荐
相关产品推荐

