多级列标题作为新列

时间:2021-04-24 16:19:29

标签: python pandas dataframe multi-index

我有一个具有多级列标题的以下形式的数据框。在这种情况下,每个类别都有一个日期和价格。

       Person  Category1     Category2    
index  Name    Date   Price  Date  Price  
  1    Bob     1999   1      1994  2      
  2    Alice   1992   8      1992  3    
  3    Alice   1994   19     1990  6       

我想将第一列标题(即“Person”、“Category1”、“Category2”等)转换为以名称作为值的新列。此外,我想连接具有相同标题名称的列,以获得如下内容:

index  Name    Date   Price  Category
 1     Bob     1999   1      Category1
 2     Alice   1992   8      Category1       
 3     Alice   1994   19     Category1
 4     Bob     1994   2      Category2
 5     Alice   1992   3      Category2
 6     Alice   1990   6      Category2

尝试 reset_index() 删除多索引但没有任何改变。

1 个答案:

答案 0 :(得分:1)

我们可以将数据帧的索引设置为 Name 列,然后 stacklevel=0 上的数据帧进行重塑,然后是 rename_axisreset_index

df.set_index(('Person', 'Name')).stack(0)\
  .rename_axis(['Name', 'Category']).reset_index()

    Name   Category  Date  Price
0    Bob  Category1  1999      1
1    Bob  Category2  1994      2
2  Alice  Category1  1992      8
3  Alice  Category2  1992      3
4  Alice  Category1  1994     19
5  Alice  Category2  1990      6