Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在数据框中设置3级列名_Python 3.x_Pandas_Multi Level - Fatal编程技术网

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”这样的子集。我将编辑我的帖子以进一步澄清。无论如何谢谢你