2017-11-17 1 views
1

2つのデータフレームに異なる列があります。 最初の3つの列に基づいてそれらを連結しようとしています。特定の列に基づいて2つのデータフレームを連結するにはどうすればよいですか?

a b c X 
1 H A 8 1 
2 M D 3 2 
3 H A 9 3 
4 L C 9 4 

    a b c Y 
1 H A 8 4 
2 M D 3 3 
3 H A 9 2 
4 L C 9 2 

それは期待された結果だ:私はそれらを連結するための効率的な方法を見つけることができません

a b c X Y 
1 H A 8 1 4 
2 M D 3 2 3 
3 H A 9 3 2 
4 L C 9 4 2 

!!

+0

あなたが試した非効率な方法は何ですか? – roganjosh

答えて

1

私はmergeがいい作業すべきだと思う:

df = pd.merge(df1, df2, on=['a','b','c']) 

動的に最初の3列使用が必要な場合:

print (df1.columns[:3].tolist()) 
['a', 'b', 'c'] 

df = pd.merge(df1, df2, on=df1.columns[:3].tolist()) 

print (df) 
    a b c X Y 
0 H A 8 1 4 
1 M D 3 2 3 
2 H A 9 3 2 
3 L C 9 4 2 

をしかし可能最初の3列は両方DataFrameに異なる場合彼らが参加する必要があります:

cols = df1.columns[:3].tolist() 
df2 = df2.rename(columns=dict(zip(df2.columns[:3], cols))) 
df = pd.merge(df1, df2, on=cols) 
0
  • 出力順序が重要でない場合、
  • 、B、Cは、行ごとに同じである、
  • X & Yは、行ごとに異なっています。

LS1 = [( 'H'、 'A'、8,4])を設定セット([ 'H'、 'A'、8,1])]
LS1 =セット()。連合(* LS1)
印刷LS1
セット([ 'A'、1、4、8、 'H'])

0
new_df = pd.merge(df1, df2) 
print (new_df) 

output:-  a b c X Y 
      0 H A 8 1 4 
      1 M D 3 2 3 
      2 H A 9 3 2 
      3 L C 9 4 2 
+3

説明を追加してください。 – mikep

関連する問題