给定以下数据:
var_1 var_2 var_3
0 5.0 7.0 3.0
1 4.0 5.0 10.0
2 4.0 9.0 7.0
3 9.0 10.0 4.0
4 4.0 9.0 3.0
输出应该是:
var_3 var_4 var_5 var_7 var_9 var_10
0 3 0 1 2 0 0
1 0 1 2 0 0 3
2 0 1 0 3 2 0
3 0 3 0 0 1 2
4 3 1 0 0 2 0
这不是一个典型的支点,虽然可以使用iterrows
这样的东西来完成,但我觉得应该有一个更好的方法。
实际情况是,行中的值用于列,列后缀用于单元格值。
编辑
这个问题正好有回答它所需的信息——结束它对我来说毫无意义,所以请解释一下。
首先通过rename
为_
之后的值获取新列名,通过DataFrame.melt
取消预览,通过DataFrame.set_index
将value
添加到索引中,并通过Series.unstack
重新整形,最后一些数据列清理:
f = lambda x: int(x.split('_')[1])
df = (df.rename(columns=f)
.melt(ignore_index=False)
.set_index('value', append=True)['variable']
.unstack(fill_value=0)
.rename(columns=int)
.add_prefix('var_')
.rename_axis(None, axis=1))
print (df)
var_3 var_4 var_5 var_7 var_9 var_10
0 3 0 1 2 0 0
1 0 1 2 0 0 3
2 0 1 0 3 2 0
3 0 3 0 0 1 2
4 3 1 0 0 2 0