如何基于两列数据生成指定格式的哑变量DataFrame?
解决方案
首先假设你的原始DataFrame包含两列,分别命名为id(存储a/b/c分类)和stage(存储stg1/stg2/stg3分类),以下三种都是pandas原生向量化实现方案,效率远高于自定义循环:
方案1:crosstab(最简洁)
直接调用交叉表函数,默认统计频次,刚好符合0/1哑变量需求:
import pandas as pd # 构造测试数据的示例,你可以替换为自己的读入逻辑 df = pd.DataFrame([ ["a", "stg1"], ["a", "stg2"], ["a", "stg3"], ["b", "stg2"], ["b", "stg3"], ["c", "stg1"] ], columns=["id", "stage"]) # 核心转换代码 result = pd.crosstab(df["id"], df["stage"])
方案2:pivot_table(你提到的透视表思路)
用size作为聚合函数,缺失值填充为0即可:
result = df.pivot_table( index="id", columns="stage", aggfunc="size", fill_value=0 )
方案3:get_dummies(修正用法)
get_dummies本身只能生成单列的哑变量,需要搭配分组求和才能得到你要的格式:
result = pd.get_dummies(df, columns=["stage"]).groupby("id").sum()
如果需要和你给出的示例格式完全对齐,去掉索引和列的名称,可以追加一行:
result = result.rename_axis(index=None, columns=None)
内容的提问来源于stack exchange,提问作者biohazard90
相关产品推荐
相关产品推荐

