如何将DataFrame附加到多索引DataFrame?

时间:2019-01-31 21:55:27

标签: pandas dataframe multi-index

假设我有数据框

In [1]: a=pd.DataFrame([[1,2],[3,4],[5,6],[7,8]],  
   ...:     index=pd.MultiIndex.from_product([('A','B'),('d','e')]))                                    

In [2]: a                                                                                               
Out[2]: 
     0  1
A d  1  2
  e  3  4
B d  5  6
  e  7  8

In [3]: b=pd.DataFrame([[9,10],[11,12]],index=('d','e'))                                                

In [4]: b                                                                                               
Out[4]: 
    0   1
d   9  10
e  11  12

,我想将b附加到a,并使用子索引C,产生 DataFrame

      0   1
A d   1   2
  e   3   4
B d   5   6
  e   7   8
C d   9  10
  e  11  12

我尝试了

In [5]: a.loc['C'] = b 

但是得到了

TypeError: 'int' object is not iterable

我该怎么做?

3 个答案:

答案 0 :(得分:3)

将新值分配给b,然后将set_index之前的swaplevelappend分配给a

a.append(b.assign(k='C').set_index('k',append=True).swaplevel(0,1))
Out[33]: 
      0   1
A d   1   2
  e   3   4
B d   5   6
  e   7   8
C d   9  10
  e  11  12

答案 1 :(得分:1)

首先将b的索引更新为与a相同的级别,然后进行concat:

b.index = pd.MultiIndex.from_arrays([('C','C'), ('d','e')])
pd.concat([a,b]))])

答案 2 :(得分:0)

如果想逐步进行;

df2 = pd.concat([a,b], ignore_index=True)
df2['i0'] = a.index.get_level_values(0).tolist() + ['C']*len(b)
df2['i1'] = a.index.get_level_values(0).union(b.index)
df2.set_index(['i0', 'i1'])

输出

         0  1
i0  i1      
A   A   1   2
A       3   4
B   B   5   6
B       7   8
C   d   9   10
e       11  12