2016-04-23 10 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 

、あなたはdf1ない空であると仮定し、merge()を試すことができます

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

残念ながら、データフレームの1つが空の場合、これは機能しません – David

+0

ありがとうございます。私の状況では動作するように少し細部を追加する必要がありました.df1.index.names + df2.index.namesから重複する列を削除してください – David

+0

@David、私は私の答えを更新しました。 – MaxU

関連する問題