在python中旋转表格后将多索引转换回列

时间:2019-05-30 22:12:54

标签: python pandas numpy

我要旋转具有多列的表。

数据框

 a       b       c      d

id_1   loc_1   sale_1  1
id_1   loc_1   sale_2  2
id_2   loc_2   sale_1  3
id_2   loc_2   sale_2  4

我应用了以下逻辑

pd.pivot_table(df,index=['a', 'b'], columns='c', values='d')

我得到以下输出

                    sale_1  sale_2
('id_1', 'loc_1')      1      2
('id_2', 'loc_2')      3      4

但我希望它为

 a       b     sale_1  sale_2
id_1   loc_1      1      2
id_2   loc_2      3      4

我尝试将逻辑更改为

pd.pivot_table(df,index=['a', 'b'], columns='c', values='d').reset_index()

但是我面临

的错误
TypeError: cannot insert an item into a CategoricalIndex that is not 
           already an existing category

我不确定我在哪里做错了吗?

1 个答案:

答案 0 :(得分:1)

您的问题是数据透视表的数据列具有分类列。重置:

new_df = pd.pivot_table(df,index=['a', 'b'], columns='c', values='d')
new_df.columns = new_df.columns.categories

new_df.reset_index()

返回:

    a       b       sale_1  sale_2
0   id_1    loc_1   1       2
1   id_2    loc_2   3       4