鉴于以下数据:
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
取消透视,将 value
添加到索引 DataFrame.set_index
并通过 Series.unstack
reshape ,最后一些数据列清理:
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
关于python - 在 pandas 中将数据从行旋转到具有特定结构的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65235713/