我的数据框有分类变量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
你可以帮我解决这个问题。非常感谢你。
答案 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