Python 3.x 在数据框中设置3级列名
我正在尝试一个具有以下结构的框架Python 3.x 在数据框中设置3级列名,python-3.x,pandas,multi-level,Python 3.x,Pandas,Multi Level,我正在尝试一个具有以下结构的框架 h/a totales sub1 sub2 sub1 sub2 a b ... f g ....m a b ... f g ....m 也就是说,第一层有两个标签,第二层也有两个标签,然后是列名的子集,其中sub1和sub2
h/a totales
sub1 sub2 sub1 sub2
a b ... f g ....m a b ... f g ....m
也就是说,第一层有两个标签,第二层也有两个标签,然后是列名的子集,其中sub1和sub2的列名不同
为此,我采取了以下措施:
columnas=pd.MultiIndex.from_product([['h/a','totals'],['means','percentages'],
[('means','a'),('means','b'),....('percentage','g'),....],
names=['data level 1','data level 2','data level 3']])
data=[data,pata,......]
newframe=pd.DataFrame(data,columns=columnas)
我得到的是这个错误:
>ValueError: Shape of passed values is (1, 21), indices imply (84, 21)
如何修复此问题,使其具有按列名的多级框架
谢谢我认为需要从列表中理解:
L1 = list('abc')
L2 = list('ghi')
tups = ([('h/a','means', x) for x in L1] +
[('h/a','percentage', x) for x in L2] +
[('totals','means', x) for x in L1] +
[('totals','percentage', x) for x in L2])
columnas=pd.MultiIndex.from_tuples(tups, names=['data level 1','data level 2','data level 3'])
print (columnas)
MultiIndex(levels=[['h/a', 'totals'],
['means', 'percentage'],
['a', 'b', 'c', 'g', 'h', 'i']],
labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1],
[0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]],
names=['data level 1', 'data level 2', 'data level 3'])
#some random data
np.random.seed(785)
data = np.random.randint(10, size=(3, 12))
print (data)
[[8 0 4 1 2 5 4 1 4 1 1 8]
[1 5 0 7 4 8 4 1 3 8 0 2]
[5 9 4 9 4 6 3 7 0 5 2 1]]
newframe=pd.DataFrame(data,columns=columnas)
print (newframe)
data level 1 h/a totals
data level 2 means percentage means percentage
data level 3 a b c g h i a b c g h i
0 8 0 4 1 2 5 4 1 4 1 1 8
1 1 5 0 7 4 8 4 1 3 8 0 2
2 5 9 4 9 4 6 3 7 0 5 2 1
但如果我这样做,则means和percentage将是相同列名子集的父级。我使用元组是因为means有一个列名子集,例如,“a”,“b”,“c”,而percentage有一个像“d”,“e”,“f”这样的子集。我将编辑我的帖子以进一步澄清。无论如何谢谢你