我尝试将Excel文件从水平转换为垂直:
使用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
答案 0 :(得分:2)
如果有MultiIndex in columns
,则可以使用DataFrame.stack
,DataFrame.rename_axis
和DataFrame.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