2017-08-22 7 views
0

この2つのDFがあります。 これは、DF1は、[ 'nice_in_here']である:2つのデータフレームに、それらの列が一致する場合は結合してください

      nice_in_here 
0         NaN 
1       Krystyna 
2        Piotr 
3       Domicela 
4        Jaro 

これはDF2ある[[ 'nice_in_there'、 'current_club']]:

nice_in_there    current_club 
0 Krystyna     Klub-Duzych-Pup 
1 Elżbieta     NaN 
2 Domicela     NaN 
3 Piotr      Klub-Duzych-Pup 

だから、私は何をしたいことは次のとおりです。

へDF2 ["nice_in_here"]にDF2 ["nice_in_there"]が含まれているかどうかを確認し、そうであれば対応するDF2 ["current_club"]をDF1 ["nice-in_here"]に結合します。

私は([、[ 'nice_in_here' 'current_club']] DF1を入力した後)で持つようにしたい結果:欠損値が重要であるように私がNaNをドロップしたくない

      nice_in_here  current_club 
0         NaN     NaN 
1       Krystyna  Klub-Duzych-Pup 
2        Piotr  Klub-Duzych-Pup 
3       Domicela     NaN 
4        Jaro     NaN 

注意を私のために。

助けてください、これが私を怒らせてくれます!

答えて

0

これは動作するはずです:

pd.merge(DF1, DF2, how="left", left_on="nice_in_here", right_on="nice_in_there") 
0

オプション1

を使用できdf.map

In [1073]: mapping = dict(df2.values) 

In [1074]: df1['current_club'] = df1.nice_in_here.map(mapping); df1 
Out[1074]: 
    nice_in_here  current_club 
0   NaN    NaN 
1  Krystyna Klub-Duzych-Pup 
2  Piotr Klub-Duzych-Pup 
3  Domicela    NaN 
4   Jaro    NaN 

オプション2

df.mergeは、ここで使用することができます。

In [1079]: df1.merge(df2, how='left', left_on='nice_in_here', right_on='nice_in_there')[df2.columns] 
Out[1079]: 
    nice_in_there  current_club 
0   NaN    NaN 
1  Krystyna Klub-Duzych-Pup 
2   Piotr Klub-Duzych-Pup 
3  Domicela    NaN 
4   NaN    NaN 

パフォーマンス

セットアップはdf1に類似した構造のデータセットを含むが、はるかに長い:

df11 = pd.concat([df1] * 10000) 

ここでタイミングです:

%timeit df11.nice_in_here.map(mapping) # map 
100 loops, best of 3: 4.49 ms per loop 

%timeit df11.merge(df2, how='left', left_on='nice_in_here', right_on='nice_in_there')[df2.columns] # merge 
100 loops, best of 3: 9.61 ms per loop 
関連する問題