Please see below code. Why do df2 and df3 differ? according to https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
left: use only keys from left frame, similar to a SQL left outer join; preserve key order
right: use only keys from right frame, similar to a SQL right outer join; preserve key order
I have a feeling that right merge does not preserve key order.. thanks!
import pandas as pd
print pd.__version__ # 0.20.3
A = pd.DataFrame({'lkey': ['foo1', 'foo2', 'foo4'], 'value': [1, 2, 4]})
B = pd.DataFrame({'rkey': ['foo1', 'foo2', 'foo3', 'foo4'], 'value': [5, 6, 7, 8]})
# A
# lkey value
# 0 foo1 1
# 1 foo2 2
# 2 foo4 4
#
# B
# rkey value
# 0 foo1 5
# 1 foo2 6
# 2 foo3 7
# 3 foo4 8
print '+++'
df2 = pd.merge(A, B, left_on='lkey', right_on='rkey', how='right', indicator=True)
print df2
# lkey value_x rkey value_y _merge
# 0 foo1 1.0 foo1 5 both
# 1 foo2 2.0 foo2 6 both
# 2 foo4 4.0 foo4 8 both
# 3 NaN NaN foo3 7 right_only
print '+++'
df3 = pd.merge(B, A, left_on='rkey', right_on='lkey', how='left', indicator=True)
print df3
# rkey value_x lkey value_y _merge
# 0 foo1 5 foo1 1.0 both
# 1 foo2 6 foo2 2.0 both
# 2 foo3 7 NaN NaN left_only
# 3 foo4 8 foo4 4.0 both