2016-04-23 55 views
1
import pandas as pd 

d1 = {'A': ['a'], 
     'B1': ['b1'], 
     'C1': ['c1']} 

d2 = {'A': ['a'], 
     'B2': ['b2'], 
     'C2': ['c2']} 

df1 = pd.DataFrame(d1) 
df2 = pd.DataFrame(d2) 

df1.set_index(['A', 'B1'], inplace=True) 
df2.set_index(['A', 'B2'], inplace=True) 

df = pd.concat([df1, df2], axis=0) 

print(df) 

我得到的输出:拼接不均匀熊猫Multiindices

 C1 C2 
A B1   
a b1 c1 NaN 
    b2 NaN c2 

不过,我想有

    C1 C2 
A B1 B2    
a b1 NaN  c1 NaN 
a NaN b2  NaN c2 

哪些是在熊猫串联multiindices规则?

我怎样才能得到我想要的结果?

回答

1

UPDATE:处理重复列:

In [39]: pd.concat([df1.reset_index(),df2.reset_index()])\ 
    ....: .set_index(pd.unique(df1.index.names + df2.index.names).tolist()) 
Out[39]: 
      C1 C2 
A B1 B2 
a b1 NaN c1 NaN 
    NaN b2 NaN c2 

OLD答案:

In [259]: pd.concat([df1.reset_index(), df2.reset_index()]).set_index(df1.index.names + df2.index.names) 
Out[259]: 
        C F 
A B D E 
a b NaN NaN c NaN 
NaN NaN d e NaN f 

或者,你可以尝试merge(),假设df1空:

df1.reset_index().merge(df2.reset_index(), left_index=True, right_index=True, how='left').set_index(df1.index.names + df2.index.names) 
+0

不幸的是,如果其中一个数据帧是空的,这不起作用 – David

+0

非常感谢您的帮助。我不得不添加一些细节,但它在我的情况下工作:从df1.index.names + df2.index.names删除重复的列 – David

+0

@David,我已更新我的答案 - 请检查 – MaxU