Python 将分类变量分为多列(2)
我有一个带有分类变量段的数据帧Python 将分类变量分为多列(2),python,pandas,numpy,Python,Pandas,Numpy,我有一个带有分类变量段的数据帧 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
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
对于每个变量,我想将一个列段转换为3类,如下所示:
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
你能帮我一下吗 熔化与枢轴_表
我建议省略fill_value='null',改为fill_value=0或完全删除,因为将字符串与数字数据混合会影响性能。但是,如果您只想保存结果,而不想保存其他内容,则这是可以的。另一种方法是
使用取消堆栈格式和数据帧列名
df= df.set_index(['ID','Segment']).unstack(fill_value='null')
df.columns = ['_'.join(val ) for val in zip(df.columns.get_level_values(0),df.columns.get_level_values(1))]
或者以更优雅的方式格式化列
df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
print df
输出:
Var1_AAA Var1_BBB Var1_CCC Var2_AAA Var2_BBB Var2_CCC Var3_AAA Var3_BBB \
ID
1 1 null null 1 null null 1 null
2 null 1 null null 0 null null 1
3 null 1 null null 1 null null 1
4 0 null null 1 null null 1 null
5 null null 0 null null 1 null null
6 0 null null 0 null null 1 null
7 0 null null 1 null null 1 null
8 1 null null 0 null null 1 null
9 null 1 null null 0 null null 1
10 null null 1 null null 0 null null
Var3_CCC
ID
1 null
2 null
3 null
4 null
5 1
6 null
7 null
8 null
9 null
10 1
df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
print df
Var1_AAA Var1_BBB Var1_CCC Var2_AAA Var2_BBB Var2_CCC Var3_AAA Var3_BBB \
ID
1 1 null null 1 null null 1 null
2 null 1 null null 0 null null 1
3 null 1 null null 1 null null 1
4 0 null null 1 null null 1 null
5 null null 0 null null 1 null null
6 0 null null 0 null null 1 null
7 0 null null 1 null null 1 null
8 1 null null 0 null null 1 null
9 null 1 null null 0 null null 1
10 null null 1 null null 0 null null
Var3_CCC
ID
1 null
2 null
3 null
4 null
5 1
6 null
7 null
8 null
9 null
10 1