【发布时间】:2021-10-15 09:29:33
【问题描述】:
我有一个带有列标题的数据框(以及我的真实数据多级行索引)。我想根据我拥有的列表向列添加二级索引。
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"]
我想要这样的东西:
我尝试使用 How to add a second level column header/index to dataframe by matching to dictionary values? - 但是无法使其正常工作(而且不理想,因为我需要弄清楚如何自动化字典,而我没有)。
我还尝试将列表添加为数据框中的一行并将该行转换为二级索引,如 this answer 使用
df.loc[len(df)] = food_cat
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[len(df)-1])
但得到了错误 检查所有数组的长度是否相等, TypeError: Input must be a list / sequence of array-likes.
我也尝试将df = pd.MultiIndex.from_arrays(df.columns, np.array(food_cat)) 与import numpy as np 一起使用,但得到了同样的错误。
我觉得这应该是一个简单的任务(它是针对行的),并且有很多问题被问到,但我很难找到可以复制的东西以适应我的数据。
【问题讨论】:
-
为什么不直接使用:
df.columns = pd.MultiIndex.from_arrays([food_cat, df.columns]) -
pd.MultiIndex.from_arrays 第一个参数,
arrays是一维“类数组”对象的列表。 -
感谢@sammywemmy,如果您将其发布为我会接受的答案。在我放弃并发布之前,我花了几个小时试图找到一个工作示例。我并不惊讶它真的很简单。
标签: python pandas multi-index