Pandas 使用列表向列添加二级索引
Pandas add a second level index to the columns using a list
我有一个带有列标题的数据框(对于我的真实数据 multi-level 行索引)。我想根据我拥有的列表向列添加二级索引。
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"]
我想要这样的东西:
我尝试使用 - 但是无法正常工作(而且不理想,因为我需要弄清楚如何使字典自动化,而我没有)。
我还尝试将列表添加为数据框中的一行并将该行转换为二级索引,如 使用
df.loc[len(df)] = food_cat
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[len(df)-1])
但出现错误
检查所有数组的长度是否相等,
类型错误:输入必须是 array-likes.
的列表/序列
我也尝试过将 df = pd.MultiIndex.from_arrays(df.columns, np.array(food_cat))
与 import numpy as np
一起使用,但得到了同样的错误。
我觉得这应该是一个简单的任务(它是针对行的),而且有很多问题被问到,但我一直在努力寻找可以复制以适应我的数据的东西。
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
我有一个带有列标题的数据框(对于我的真实数据 multi-level 行索引)。我想根据我拥有的列表向列添加二级索引。
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"]
我想要这样的东西:
我尝试使用
我还尝试将列表添加为数据框中的一行并将该行转换为二级索引,如
df.loc[len(df)] = food_cat
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[len(df)-1])
但出现错误 检查所有数组的长度是否相等, 类型错误:输入必须是 array-likes.
的列表/序列我也尝试过将 df = pd.MultiIndex.from_arrays(df.columns, np.array(food_cat))
与 import numpy as np
一起使用,但得到了同样的错误。
我觉得这应该是一个简单的任务(它是针对行的),而且有很多问题被问到,但我一直在努力寻找可以复制以适应我的数据的东西。
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