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