python - Categorical variables into multiple columns (2)
问题描述
I have a dataframe with a categorical variable Segment
ID Segment Var1 Var2 Var3
1 AAA 1 1 1
2 BBB 1 0 1
3 BBB 1 1 1
4 AAA 0 1 1
5 CCC 0 1 1
6 AAA 0 0 1
7 AAA 0 1 1
8 AAA 1 0 1
9 BBB 1 0 1
10 CCC 1 0 1
And I would like to transform a column Segment into 3 categories for each variable like this:
ID Var1_AAA Var1_BBB Var1_CCC Var2_AAA Var2_BBB Var2_CC Var3_AAA Var3_BBB Var3_CCC
1 1 null null 1 null null 1 null null
2 null 1 null null 0 null null 1 null
3 null 1 null null 1 null null 1 null
4 0 null null 1 null null 1 null null
5 null null 0 null null 1 null null 1
6 0 null null 0 null null 1 null null
7 0 null null 1 null null 1 null null
8 1 null null 0 null null 1 null null
9 null 1 null null 0 null null 1 null
10 null null 1 null null 0 null null 1
Could you please help me with that?
解决方案
melt
和pivot_table
v = df.melt(['ID', 'Segment'])
v = v.pivot_table(index='ID',
columns=['Segment', 'variable'],
values='value',
fill_value='null')
v.columns = v.columns.map('{0[1]}_{0[0]}'.format)
print(v)
Var1_AAA Var2_AAA Var3_AAA Var1_BBB Var2_BBB Var3_BBB Var1_CCC Var2_CCC \
ID
1 1 1 1 null null null null null
2 null null null 1 0 1 null null
3 null null null 1 1 1 null null
4 0 1 1 null null null null null
5 null null null null null null 0 1
6 0 0 1 null null null null null
7 0 1 1 null null null null null
8 1 0 1 null null null null null
9 null null null 1 0 1 null null
10 null null null null null null 1 0
Var3_CCC
ID
1 null
2 null
3 null
4 null
5 1
6 null
7 null
8 null
9 null
10 1
我建议省略fill_value='null'
, 而是将其替换为fill_value=0
或完全删除,因为将字符串与数字数据混合会影响性能。但是,如果您只是要保存结果而仅此而已,这没关系。
推荐阅读
- python - Tensorflow 模型为文本生成添加问题
- python - 如何让 CatBoost get_object_importance 与 AUC 一起使用?
- android - Android Studio 3.1 拒绝工作
- javascript - 在设置的间隔上设置计数
- bots - 单击网页上的按钮
- vba - 工作表中多个工作表的 VBA 循环
- android - 未解决的参考 GoogleSignIn
- javascript - 来自现有对象的新 ES6 类实例
- c++ - 使用 CMake GUI 将 Contrib 模块添加到 OpenCV 3 的说明
- oracle - 插入性能 - Oracle 与 Postgres