在Python中将数据帧从水平重塑为垂直
我尝试按如下方式将excel文件从水平转换为垂直: 使用在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
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