用panda将数据从行透视到具有特定结构的列



给定以下数据:

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_indexvalue添加到索引中,并通过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

最新更新