分类变量分为多个列

时间:2018-06-14 16:36:00

标签: python pandas numpy

我的数据框有分类变量Segment

ID  Segment Var
1   AAA     1
2   BBB     0
3   BBB     1
4   AAA     1
5   CCC     1
6   AAA     0 
7   AAA     1
8   AAA     0
9   BBB     0
10  CCC     0

我想将列Segment转换为3类,如下所示:

ID  SegmentAAA  SegmentBBB  SegmentCCC
1   1           null        null
2   null        0           null
3   null        1           null
4   1           null        null
5   null        null        1
6   0           null        null
7   1           null        null
8   0           null        null
9   null        0           null
10  null        null        0
你可以帮我解决这个问题。非常感谢你。

4 个答案:

答案 0 :(得分:4)

那是支点吗?

df.pivot(*df.columns)
Out[70]: 
Segment  AAA  BBB  CCC
ID                    
1        1.0  NaN  NaN
2        NaN  0.0  NaN
3        NaN  1.0  NaN
4        1.0  NaN  NaN
5        NaN  NaN  1.0
6        0.0  NaN  NaN
7        1.0  NaN  NaN
8        0.0  NaN  NaN
9        NaN  0.0  NaN
10       NaN  NaN  0.0

答案 1 :(得分:3)

使用:

df.set_index(['ID','Segment'])['Var']\
  .unstack()\
  .add_prefix('Segment')\
  .rename_axis([None], axis=1)\
  .reset_index()

输出:

   ID  SegmentAAA  SegmentBBB  SegmentCCC
0   1         1.0         NaN         NaN
1   2         NaN         0.0         NaN
2   3         NaN         1.0         NaN
3   4         1.0         NaN         NaN
4   5         NaN         NaN         1.0
5   6         0.0         NaN         NaN
6   7         1.0         NaN         NaN
7   8         0.0         NaN         NaN
8   9         NaN         0.0         NaN
9  10         NaN         NaN         0.0

选项2:

pd.crosstab(df.ID,df.Segment,df.Var,aggfunc='first')

答案 2 :(得分:2)

pd.get_dummies(df).drop('Var', axis=1)

答案 3 :(得分:0)

枢轴将是最好的选择。如果您不希望ID作为索引并获得指示的列名,那么这比Wen的答案更具体一点

df.pivot(index='ID',columns='Segment',values='Var').add_prefix('Segment').reset_index()
Segment  ID  SegmentAAA  SegmentBBB  SegmentCCC
0         1         1.0         NaN         NaN
1         2         NaN         0.0         NaN
2         3         NaN         1.0         NaN
3         4         1.0         NaN         NaN
4         5         NaN         NaN         1.0
5         6         0.0         NaN         NaN
6         7         1.0         NaN         NaN
7         8         0.0         NaN         NaN
8         9         NaN         0.0         NaN
9        10         NaN         NaN         0.0