我正试图将我的数据从宽到长进行整形,但我需要同时考虑垂直索引和水平列,这并不能真正起作用。
我当前的表格如下:
Rate FY2014 FY 2015 FY 2016 FY 2017
1.1 15.87 45.85 72.65 78.54
2.1 78.54 78.45 95.87 78.94
3.1 45.87 64.52 37.82 97.57
我想重塑这些数据,这样每个财政年度下的数字都可以有自己的列。例如,我想要这样的东西作为我的最后一张桌子。
Values Rate Year
15.87 1.1 FY2014
78.54 2.1 FY2014
45.87 3.1 FY2014
45.85 1.1 FY2015
78.45 2.1 FY2015
64.52 3.1 FY2015
72.65 1.1 FY2016
95.87 2.1 FY2016
37.82 3.1 FY2016
我是Python的新手,我尝试过类似pd.reshape或Transpose的东西,但我无法得到我想要的结果。有人能帮我吗?
使用df.melt
:
In [1806]: df = df.melt(id_vars='Rate', var_name='Year', value_name='Values')
In [1807]: df
Out[1807]:
Rate Year Values
0 1.1 FY2014 15.87
1 2.1 FY2014 78.54
2 3.1 FY2014 45.87
3 1.1 FY2015 45.85
4 2.1 FY2015 78.45
5 3.1 FY2015 64.52
6 1.1 FY2016 72.65
7 2.1 FY2016 95.87
8 3.1 FY2016 37.82
9 1.1 FY2017 78.54
10 2.1 FY2017 78.94
11 3.1 FY2017 97.57
OR:
将df.set_index
与stack()
:一起使用
In [1814]: df.set_index('Rate').stack().reset_index(name='Values').rename(columns={'level_1': 'Year'})
Out[1814]:
Rate Year Values
0 1.1 FY2014 15.87
1 1.1 FY2015 45.85
2 1.1 FY2016 72.65
3 1.1 FY2017 78.54
4 2.1 FY2014 78.54
5 2.1 FY2015 78.45
6 2.1 FY2016 95.87
7 2.1 FY2017 78.94
8 3.1 FY2014 45.87
9 3.1 FY2015 64.52
10 3.1 FY2016 37.82
11 3.1 FY2017 97.57