现在,我有三首诗的数据。每首诗都有4个指标(因此第一首诗A-D列,第二首诗E-H列,第三首I-L列)。每行包含一个人的分数(因此,行1将分别包含人1的诗歌1、2和3的分数,行2将包含人2的分数)。
Current format 我想重塑数据框的形状,以使只有四列(每个度量标准为1列),各行对应于每首诗,如下所示: Desired format
答案 0 :(得分:0)
假设源 df 已创建为:
df = pd.DataFrame(np.arange(1,25).reshape(2, -1),
columns=[ 'Metric ' + x for x in list('ABCD') ] * 3)
因此它包含:
Metric A Metric B Metric C Metric D Metric A Metric B Metric C Metric D Metric A Metric B Metric C Metric D
0 1 2 3 4 5 6 7 8 9 10 11 12
1 13 14 15 16 17 18 19 20 21 22 23 24
要将其从“宽”格式转换为“长”格式,可以运行例如:
df2 = pd.DataFrame(df.values.reshape(-1, 4), columns=df.columns[0:4],
index=[ 'Poem ' + x for x in list('123') ] * df.index.size)
获取:
Metric A Metric B Metric C Metric D
Poem 1 1 2 3 4
Poem 2 5 6 7 8
Poem 3 9 10 11 12
Poem 1 13 14 15 16
Poem 2 17 18 19 20
Poem 3 21 22 23 24
您还可以通过其他方式进行操作:
df.T.set_index(pd.MultiIndex.from_product(
[['Poem ' + x for x in list('123')], df.columns[0:4]])).T\
.stack(level=0).reset_index(level=0, drop=True)