Pandas数据帧转置具有原始行和列值

时间:2015-08-25 20:13:08

标签: python pandas pivot transpose

有谁知道如何使用原始行和列值转置pandas数据帧?我使用.iterrows()遍历每一行和每列,但我相信有更好的方法可以做到这一点。也许使用枢轴?谢谢!

DF看起来像

    a   b   c
0   11  12  13
1   21  22  23
2   31  32  33

我想要新的DF

    row col Val
0   0   a   11
1   0   b   12
2   0   c   13
3   1   a   21
4   1   b   22
5   1   c   23
6   2   a   31
7   2   b   32
8   2   c   33

3 个答案:

答案 0 :(得分:4)

以下是使用stack()的一种方式。

res = df.stack().reset_index()
res.columns = 'row col Val'.split()
res

   row col  Val
0    0   a   11
1    0   b   12
2    0   c   13
3    1   a   21
4    1   b   22
5    1   c   23
6    2   a   31
7    2   b   32
8    2   c   33

答案 1 :(得分:1)

您可以使用pandas.melt

>>> d
    a   b   c
0  11  12  13
1  21  22  23
2  31  32  33

>>> pandas.melt(d.reset_index(), id_vars='index')
   index variable  value
0      0        a     11
1      1        a     21
2      2        a     31
3      0        b     12
4      1        b     22
5      2        b     32
6      0        c     13
7      1        c     23
8      2        c     33

值的顺序有点不同,但您可以按照您喜欢的任何列对其进行排序,以便将内容输入到您想要的顺序。

答案 2 :(得分:0)

import pandas as pd
df = pd.DataFrame({'A': {0: 11, 1: 21, 2: 31},
                   'B': {0: 12, 1: 22, 2: 23},
                   'C': {0: 31, 1: 32, 2: 33}})

pd.melt(df, value_vars=['A','B','C'])
      variable  value
0        A     11
1        A     21
2        A     31
3        B     12
4        B     22
5        B     23
6        C     31
7        C     32
8        C     33