如何在保持索引的同时将熊猫数据框从宽转换为长?

时间:2020-02-21 16:05:37

标签: python pandas dataframe

我想将数据帧从宽列转换为长列,从多列变为两列,同时保留索引。我在下面尝试过使用melt。请让我知道我在想什么。

n.b。实际的数据框将具有数百列,因此我无法在代码中列出它们。

创建数据框:

df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'),index = ['jan','feb','mar'])

输出:

      A   B   C
jan  76   7  72
feb  29  15  69
mar   4  24   9

融化数据框:

df2 = pd.melt(df.reset_index())

输出:

     variable value
0     index   jan
1     index   feb
2     index   mar
3         A    76
4         A    29
5         A     4
6         B     7
7         B    15
8         B    24
9         C    72
10        C    69
11        C     9

所需的输出:

                variable  value
       jan         A     76
       feb         A     29
       mar         A      4
       jan         B      7
       feb         B     15
       mar         B     24
       jan         C     72
       feb         C     69
       mar         C      9

1 个答案:

答案 0 :(得分:2)

通过df.melt,您可以将'index'用作索引的名称,然后将'index'列设置回索引并重命名:

df.reset_index().melt('index').set_index('index').rename_axis(None)

使用df.stack也可以在下面使用:

(df.stack().rename_axis([None,'variable']).reset_index(-1,name='value')
                                              .sort_values('variable'))

    variable  value
jan        A     76
feb        A     29
mar        A      4
jan        B      7
feb        B     15
mar        B     24
jan        C     72
feb        C     69
mar        C      9