>我有一个带有分类变量段的数据帧
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
你能帮我吗?
melt
withpivot_table
v = df.melt(['ID', 'Segment'])
v = v.pivot_table(index='ID',
columns=['Segment', 'variable'],
values='value',
fill_value='null')
v.columns = v.columns.map('{0[1]}_{0[0]}'.format)
print(v)
Var1_AAA Var2_AAA Var3_AAA Var1_BBB Var2_BBB Var3_BBB Var1_CCC Var2_CCC
ID
1 1 1 1 null null null null null
2 null null null 1 0 1 null null
3 null null null 1 1 1 null null
4 0 1 1 null null null null null
5 null null null null null null 0 1
6 0 0 1 null null null null null
7 0 1 1 null null null null null
8 1 0 1 null null null null null
9 null null null 1 0 1 null null
10 null null null null null null 1 0
Var3_CCC
ID
1 null
2 null
3 null
4 null
5 1
6 null
7 null
8 null
9 null
10 1
我建议省略fill_value='null'
,而是用fill_value=0
替换它或完全删除它,因为将字符串与数字数据混合会妨碍性能。但是,如果您只是要保存结果而不是仅此而已,则可以。
另一种方式是,
使用unstack
格式和数据帧列名称
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