在Python中将数据框从水平调整为垂直

时间:2019-12-12 06:23:24

标签: python python-3.x pandas dataframe

我尝试将Excel文件从水平转换为垂直:

enter image description here

使用pd.read_clipboard我得到:

                         2017   2018   2019
city price ratio price  ratio  price  ratio
bj   10    0.1   13       0.1     23    0.1
sh   15    0.2   12       0.2     15    0.5
gz   12    0.15  14      0.15     12    0.1
sz   11    0.25  13      0.25     11    0.5 

我修改了year标头以使其看起来更好:

         2017        2018          2019
city price ratio price  ratio  price  ratio
bj   10    0.1   13       0.1     23    0.1
sh   15    0.2   12       0.2     15    0.5
gz   12    0.15  14      0.15     12    0.1
sz   11    0.25  13      0.25     11    0.5

如何将其转换为预期的输出?谢谢。

   city  year  price  ratio
0    bj  2017     10   0.10
1    bj  2018     13   0.10
2    bj  2019     23   0.10
3    sh  2017     15   0.20
4    sh  2018     12   0.20
5    sh  2019     15   0.50
6    gz  2017     12   0.15
7    gz  2018     14   0.15
8    gz  2019     12   0.10
9    sz  2017     11   0.25
10   sz  2018     13   0.25
11   sz  2019     11   0.50

1 个答案:

答案 0 :(得分:2)

如果有MultiIndex in columns,则可以使用DataFrame.stackDataFrame.rename_axisDataFrame.reset_index

print (df.columns)
MultiIndex([('2017', 'price'),
            ('2018', 'ratio'),
            ('2019', 'price'),
            ('2017', 'ratio'),
            ('2018', 'price'),
            ('2019', 'ratio')],
           )

df = df.stack(0).rename_axis(('city','year')).reset_index()
print (df)
   city  year  price  ratio
0    bj  2017     10   0.10
1    bj  2018     23   0.10
2    bj  2019     13   0.10
3    sh  2017     15   0.20
4    sh  2018     15   0.20
5    sh  2019     12   0.50
6    gz  2017     12   0.15
7    gz  2018     12   0.15
8    gz  2019     14   0.10
9    sz  2017     11   0.25
10   sz  2018     11   0.25
11   sz  2019     13   0.50