Python:串联熊猫multiindex

时间:2019-08-13 08:20:40

标签: python pandas dataframe indexing

我需要生成一个pd.DataFrame,其列由一个列表和一个Multiindex对象组成,并且需要在用数据填充最终数据帧之前进行此操作。

假设列为['one', 'two'],并从from_product获得多索引:

import pandas as pd

col_21 = ['day', 'month']
col_22 = ['a', 'b']

mult_2 =  pd.MultiIndex.from_product([ col_21, col_22 ])

我想要一个看起来像这样的列列表:

'one' | 'two' | ('day','a') | ('day','b') | ('month','a') | ('month','b')

一种可能的解决方案是使用两个不同且独立的Multiindex,一个带有一个虚拟列,两者均由from_product生成


col_11 = ['one', 'two']
col_12 = ['']
col_21 = ['day', 'month']
col_22 = ['a', 'b']

mult_1 =  pd.MultiIndex.from_product([ col_11, col_12 ])
mult_2 =  pd.MultiIndex.from_product([ col_21, col_22 ])

我该怎么办?

(one, '') | (two, '') | ('day','a') | ('day','b') | ('month','a') |  ('month','b')

我尝试了几种简单的解决方案,但每个解决方案给我一个不同的错误或错误的结果

mult_1+mult_2 #TypeError: cannot perform __add__ with this index type: MultiIndex
pd.merge #TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
pd.MultiIndex.from_arrays([ mult_1, mult_2 ]) #NotImplementedError: isna is not defined for MultiIndex

谢谢您的建议

1 个答案:

答案 0 :(得分:1)

如果可能的话,最好的方法是分别按列MultiIndex in indexonetwo分别创建MultiIndex in columnscol_21 = ['day', 'month'] col_22 = ['a', 'b'] mult_2 = pd.MultiIndex.from_product([ col_21, col_22 ]) one = range(5) two = list('ABCDE') mult_3 = pd.MultiIndex.from_arrays([ one, two], names=['one','two']) df = pd.DataFrame(0, columns=mult_2, index=mult_3) print (df) day month a b a b one two 0 A 0 0 0 0 1 B 0 0 0 0 2 C 0 0 0 0 3 D 0 0 0 0 4 E 0 0 0 0 -因此不要将非multiindex与multindex值混合:

print (mult_1.append(mult_2))

MultiIndex([(  'one',  ''),
            (  'two',  ''),
            (  'day', 'a'),
            (  'day', 'b'),
            ('month', 'a'),
            ('month', 'b')],
           )

使用Index.append

sort=False

或将Index.unionprint (mult_1.union(mult_2, sort=False)) MultiIndex([( 'one', ''), ( 'two', ''), ( 'day', 'a'), ( 'day', 'b'), ('month', 'a'), ('month', 'b')], )

{{1}}
相关问题