我有这个数据框:
Name type1 type2 type3 ... typeN color
John 8.7 0 NA ... 56 blue
Andy 45 34 9.7 ... NA yellow
我需要将其更改为:
color typeName Name value
blue type1 John 8.7
blue type2 John 0
blue type3 John NA
.
.
.
blue typeN John 56
yellow type1 Andy 45
yellow type2 Andy 34
yellow type3 Andy 9.7
.
.
.
yellow typeN Andy NA
我对如何做到这一点有些困惑,请帮忙吗?
答案 0 :(得分:3)
这与数据重塑有关。请参阅下面的使用堆栈(替代熔化)的工作流程,
样本数据
df=pd.DataFrame({'Name':['John','Andy'], 'type1':[8.7,45],'type2':[0,34], 'color':['blue','yellow']})
result = df.set_index(['Name','color'])
.rename_axis('typeName',axis=1)
.stack(dropna=False)
.reset_index(name='value')
输出
Name color typeName value
0 John blue type1 8.7
1 John blue type2 0.0
2 Andy yellow type1 45.0
3 Andy yellow type2 34.0
答案 1 :(得分:2)
pd.melt(df, id_vars=['Name', 'color'], var_name='typeName')
Name color typeName value
0 John blue type1 8.7
1 Andy yellow type1 45.0
2 John blue type2 0.0
3 Andy yellow type2 34.0
4 John blue type3 NaN
5 Andy yellow type3 9.7
6 John blue typeN 56.0
7 Andy yellow typeN NaN