2017-05-01 14 views
1

私はマージしたいcol 'A'と同じ2つのデータフレームを持っています。しかし、df2 col Aはランダムな回数複製されます。この複製は私の問題にとって重要であり、私はそれを破棄することはできません。私は最後のデータフレームをdf3のようにしたい。 Col AがCol B値を各複製にマージする場所。長さが異なる2つのデータフレームをマージして値を繰り返す

df1      df2 
Col A Col B    Col A Col B 
1  v     1  a 
2  w     2  b  
3  x     2  c 
4  y     3  d 
          3  e 
          4  f 

df3 
Col A Col B Col C 
1  a  v 
2  b  w 
2  c  w 
3  d  x 
3  e  x 
4  f  y 

答えて

0

私はあなたがset_indexによって作成Seriesmapが必要と考えている:

print (df1.set_index('Col A')['Col B']) 
Col A 
1 v 
2 w 
3 x 
4 y 
Name: Col B, dtype: object 

df2['Col C'] = df2['Col A'].map(df1.set_index('Col A')['Col B']) 
print (df2) 
    Col A Col B Col C 
0  1  a  v 
1  2  b  w 
2  2  c  w 
3  3  d  x 
4  3  e  x 
5  4  f  y 
+0

ああ男...これは「間違っていない」かもしれませんが、実際には学習者にとっては難しい答えです。私は 'merge'や' join'がはるかに近づいていると思う。 –

+0

@ JDLong - はい、それは別の解決策です。しかし、「実行時間」だけを考慮する場合は、より高速の – jezrael

+1

が速く、「学習時間」ではなく、より速いので、1つの列に必要な場合は 'map'を優先します。 –

1

使用マージ:

df2.merge(df1, on='Col A') 
Out: 
    Col A Col B_x Col B_y 
0  1  a  v 
1  2  b  w 
2  2  c  w 
3  3  d  x 
4  3  e  x 
5  4  f  y 

し、必要な場合は、後で名前を変更します。

df = df2.merge(df1, on='Col A') 
df.columns = ['Col A', 'Col B', 'Col C'] 

詳細については、merging and joiningのPandasドキュメントを参照してください。

関連する問題