2017-01-04 12 views
3

誰かがこの結果を私に説明できますか?特に、NaNがどこから来たのか分かりません。また、joinがどのような行をこの行のどの行と一致させるかを決める方法もわかりません。パンダの参加方法の理解

left_df = pd.DataFrame.from_dict({'unique_l':[0, 1, 2, 3, 4], 'join':['a', 'a', 'b','b', 'c'] }) 
right_df = pd.DataFrame.from_dict({'unique_r':[10, 11, 12, 13, 14], 'join':['a', 'b', 'b','c', 'c'] }) 

join unique_l 
0 a   0 
1 a   1 
2 b   2 
3 b   3 
4 c   4 

    join unique_r 
0 a  10 
1 b  11 
2 b  12 
3 c  13 
4 c  14 


print left_df.join(right_df, on='join', rsuffix='_r') 

join unique_l join_r unique_r 
0 a   0 NaN  NaN 
1 a   1 NaN  NaN 
2 b   2 NaN  NaN 
3 b   3 NaN  NaN 
4 c   4 NaN  NaN 
+5

一般に、索引による結合には 'join'が好ましく、列による結合には' merge'が適しています。 – IanS

答えて

3

join方法は、インデックスを利用します。何が欲しいのmerge次のとおりです。

In [6]: left_df.merge(right_df, on="join", suffixes=("_l", "_r")) 
Out[6]: 
    join unique_l unique_r 
0 a   0  10 
1 a   1  10 
2 b   2  11 
3 b   2  12 
4 b   3  11 
5 b   3  12 
6 c   4  13 
7 c   4  14 

Hereは、より詳細にjoinmergeの違いを説明し、関連する(しかし、IMOではなく、かなりの重複)質問です。

関連する問題