如何重新排列此熊猫数据框?

时间:2020-04-14 14:24:13

标签: python python-3.x pandas dataframe pandas-groupby

现在,我有三首诗的数据。每首诗都有4个指标(因此第一首诗A-D列,第二首诗E-H列,第三首I-L列)。每行包含一个人的分数(因此,行1将分别包含人1的诗歌1、2和3的分数,行2将包含人2的分数)。

Current format 我想重塑数据框的形状,以使只有四列(每个度量标准为1列),各行对应于每首诗,如下所示: Desired format

1 个答案:

答案 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)