将变量分类为多个列



>我有带有分类变量段的数据帧

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

我想将列段转换为 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

你能帮我吗?谢谢。

那是枢轴吗?

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

使用:

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')
pd.get_dummies(df).drop('Var', axis=1)

Pivot 将是最好的选择。如果您不希望 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

最新更新