Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将数据帧从水平重塑为垂直_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

在Python中将数据帧从水平重塑为垂直

在Python中将数据帧从水平重塑为垂直,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我尝试按如下方式将excel文件从水平转换为垂直: 使用pd.read\u剪贴板I获取: 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.1

我尝试按如下方式将excel文件从水平转换为垂直:

使用
pd.read\u剪贴板
I获取:

                         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

如果列中有
多索引,则可以使用,并且:


我使用
剪贴板
,只获取
索引(['2017',2018','2019',dtype='object')
作为
df.columns
@ahbon-hmmm,在实际数据中可以使用
df=pd.read_csv(文件,头=[0,1])
?但是标题必须是
2017;2018;2019;2017;2018;2019年
在第一行和
价格;比率价格;比率价格;秒中的比率(
是分隔符,所以应该有
)我使用
df=pd。读取剪贴板(sep='\s+',index\u col=[0],header=[0,1])
,然后应用你的代码使其工作。谢谢
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