2つのデータフレームがあり、それぞれに2つのインデックス列があります。それらをマージしたいと思います。たとえば、最初のデータフレームは次のとおりです。
V1
A 1/1/2012 12
2/1/2012 14
B 1/1/2012 15
2/1/2012 8
C 1/1/2012 17
2/1/2012 9
2番目のデータフレームは次のとおりです。
V2
A 1/1/2012 15
3/1/2012 21
B 1/1/2012 24
2/1/2012 9
D 1/1/2012 7
2/1/2012 16
その結果、次のものを取得したいと思います。
V1 V2
A 1/1/2012 12 15
2/1/2012 14 N/A
3/1/2012 N/A 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 7 N/A
2/1/2012 16 N/A
D 1/1/2012 N/A 7
2/1/2012 N/A 16
pd.merge
および.join
メソッドを使用していくつかのバージョンを試しましたが、何も機能しないようです。何か提案はありますか?
join
を使用できるはずです。これは、デフォルトでインデックスに結合します。希望する結果が得られたら、outer
を結合タイプとして使用する必要があります。
>>> df1.join(df2, how='outer')
V1 V2
A 1/1/2012 12 15
2/1/2012 14 NaN
3/1/2012 NaN 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 17 NaN
2/1/2012 9 NaN
D 1/1/2012 NaN 7
2/1/2012 NaN 16
署名:_.join(other、on = None、how = 'left'、lsuffix = ''、rsuffix = ''、sort = False)Docstring:インデックスまたはキー列のいずれかで列を他のDataFrameと結合します。リストを渡すことにより、複数のDataFrameオブジェクトをインデックスで効率的に結合します。
merge
でこれを行うことができます:
df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)
キーワード引数how='outer'
は両方のフレームのすべてのインデックスを保持し、欠落しているインデックスをNaN
で埋めます。 left_index
およびright_index
キーワード引数では、インデックスに対してマージが実行されます。マージを実行した後に列内のNaN
をすべて取得する場合、別のトラブルシューティング手順は、インデックスのdtypes
が同じであることを確認することです。
上記のmerge
コードは、次の出力を生成します。
V1 V2
A 2012-01-01 12.0 15.0
2012-02-01 14.0 NaN
2012-03-01 NaN 21.0
B 2012-01-01 15.0 24.0
2012-02-01 8.0 9.0
C 2012-01-01 17.0 NaN
2012-02-01 9.0 NaN
D 2012-01-01 NaN 7.0
2012-02-01 NaN 16.0