Pandas 使用列表向列添加二级索引

Esm*_*me_ 3 python multi-index pandas

我有一个带有列标题的数据框(以及我的真实数据多级行索引)。我想根据我拥有的列表向列添加二级索引。

import pandas as pd

data = {"apple": [7,5,6,4,7,5,8,6],
       "strawberry": [3,5,2,1,3,0,4,2],
       "banana": [1,2,1,2,2,2,1,3],
        "chocolate" : [5,8,4,2,1,6,4,5],
        "cake":[4,4,5,1,3,0,0,3]
       }

df = pd.DataFrame(data)
food_cat = ["fv","fv","fv","j","j"]
Run Code Online (Sandbox Code Playgroud)

我想要看起来像这样的东西:

所需输出示例

我尝试使用如何通过匹配字典值将第二级列标题/索引添加到数据帧?- 但是无法让它工作(而且并不理想,因为我需要弄清楚如何自动化字典,而我没有)。

我还尝试将列表添加为数据框中的一行,并将该行转换为二级索引,如本答案中使用

df.loc[len(df)] = food_cat
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[len(df)-1])
Run Code Online (Sandbox Code Playgroud)

但收到错误 检查所有数组的长度是否相等,类型错误:输入必须是类似数组的列表/序列。

我也尝试使用df = pd.MultiIndex.from_arrays(df.columns, np.array(food_cat))withimport numpy as np但遇到了同样的错误。

我觉得这应该是一个简单的任务(它是针对行的),并且提出了很多问题,但我正在努力寻找可以复制的东西来适应我的数据。

sam*_*mmy 5

Pandas 多索引创建需要一个列表(或类似列表)作为参数传递:

df.columns = pd.MultiIndex.from_arrays([food_cat, df.columns])

df

     fv                           j
  apple strawberry banana chocolate cake
0     7          3      1         5    4
1     5          5      2         8    4
2     6          2      1         4    5
3     4          1      2         2    1
4     7          3      2         1    3
5     5          0      2         6    0
6     8          4      1         4    0
7     6          2      3         5    3
Run Code Online (Sandbox Code Playgroud)