Reshape data in Pandas - Python 3



我正试图将我的数据从宽到长进行整形,但我需要同时考虑垂直索引和水平列,这并不能真正起作用。

我当前的表格如下:

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_indexstack():一起使用

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

最新更新