2017-12-18 14 views
1

説明を簡単にするため、問題は単純化されています。類似した、分離した列を持つデータフレームの連結

3つのデータフレームを、同様の列と同じ列ではなく、同じ列の値で取得します。繰り返される列がなく、すべてのユニークな列が保持されます(つまり、内部結合は行われません)、列の値が同じ場合は新しい行が作成されないように、どうやって連結しますか?

個々のデータフレーム:

DF1:

a b c 
0 1 2 3 
1 11 22 33 

DF2:

b c d 
0 2 3 4 
1 22 33 44 

DF3:

c d e 
0 3 4 5 
1 33 44 55 

所望の出力:

a b c d e 
0 1 2 3 4 5 
1 11 22 33 44 55 

しかし、単に

pd.concat([df1, df2, df3], axis=1) 

を使用して、重複する列を含みます。使用

答えて

1

オプション1
concat + groupby -

pd.concat([df1, df2, df3], 1).groupby(axis=1, level=0).first() 

    a b c d e 
0 1 2 3 4 5 
1 11 22 33 44 55 

オプション2
merge -

df1.merge(df2).merge(df3) 

    a b c d e 
0 1 2 3 4 5 
1 11 22 33 44 55 

あなたがそれらのリストを持っている場合、一般的には、nデータフレームのために、あなたは、n-wayがループとの合併を実行することができます -

df_list = [df1, df2, df3] 
df = df_list[0] 

for d in df_list[1:]: 
    df = df.merge(d) 

df 
    a b c d e 
0 1 2 3 4 5 
1 11 22 33 44 55 
+0

私は6つのデータフレームを持っているので、コードをわかりやすくするために、私は希望マージを避けるのが好きです。私はこのgroupbyオプションが好きです! – Lisle

+0

@Lisleああ、私はそうかもしれないと思った。私は一般的なマージオプションを追加しましたが、値が列全体で同じであれば、最終的にgroupby操作が最適です。 –

関連する問題