堆叠标题,而不是两列

时间:2017-08-08 08:49:07

标签: python pandas dataframe stack multi-index

试图堆叠我的桌子,但如果我没有#34;国家栏"它会很好用。我如何保持第一列和#34;取消堆叠,只是堆叠日期的行。下面的图片展示了我想要的东西。

enter image description here

左图是表格的样子,右边是我想要的格式。所以问题是如何在行之后堆叠,通常是在列级别之后堆叠。

一切顺利,

1 个答案:

答案 0 :(得分:2)

你需要:

cols = ['GEO','INDIC',1990,1991,1992]
df = pd.DataFrame({'GEO':['Austria']*3, 'INDIC':['dis','fin1','fin2'],
                   1990:[2,42,17],1991:[3,44,18],1992:[2,44,17]}, columns=cols)
print (df)
       GEO INDIC  1990  1991  1992
0  Austria   dis     2     3     2
1  Austria  fin1    42    44    44
2  Austria  fin2    17    18    17

<强> 1

按所有列的set_index创建索引,不进行重新整形,然后添加stackrename_axisreset_index用于新列名:

df1 = df.set_index(['GEO','INDIC'])
        .stack()
        .rename_axis(['GEO','INDIC', 'year'])
        .reset_index(name='quantity')
print (df1)
       GEO INDIC  year  quantity
0  Austria   dis  1990         2
1  Austria   dis  1991         3
2  Austria   dis  1992         2
3  Austria  fin1  1990        42
4  Austria  fin1  1991        44
5  Austria  fin1  1992        44
6  Austria  fin2  1990        17
7  Austria  fin2  1991        18
8  Austria  fin2  1992        17

<强> 2

melt重塑,有不同的列排序:

df1 = df.melt(id_vars=['GEO','INDIC'], var_name='year', value_name='quantity')
print (df1)
       GEO INDIC  year  quantity
0  Austria   dis  1990         2
1  Austria  fin1  1990        42
2  Austria  fin2  1990        17
3  Austria   dis  1991         3
4  Austria  fin1  1991        44
5  Austria  fin2  1991        18
6  Austria   dis  1992         2
7  Austria  fin1  1992        44
8  Austria  fin2  1992        17