In [1]:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

In [2]:
df_left = DataFrame({'key':['X','Y','Z','X','Y'],
                    'data':range(5)})
df_left


Out[2]:
data key
0 0 X
1 1 Y
2 2 Z
3 3 X
4 4 Y

In [3]:
df_right = DataFrame({'group_data':[10,20]},index=['X','Y'])

df_right


Out[3]:
group_data
X 10
Y 20

In [4]:
pd.merge(df_left,df_right,left_on='key',right_index=True)


Out[4]:
data key group_data
0 0 X 10
3 3 X 10
1 1 Y 20
4 4 Y 20

In [11]:
# merging with index hierarchy
df_left_hr = DataFrame({'key1':['SF','SF','SF','LA','LA'],
                        'key2': [10,20,30,20,30],
                        'data_set':np.arange(5.)})
df_left_hr


Out[11]:
data_set key1 key2
0 0.0 SF 10
1 1.0 SF 20
2 2.0 SF 30
3 3.0 LA 20
4 4.0 LA 30

In [9]:
df_right_hr = DataFrame(np.arange(10).reshape(5,2),
                        index=[['LA','LA','SF','SF','SF'],[20,10,10,10,20]],
                        columns=['col_1','col_2'])
df_right_hr


Out[9]:
col_1 col_2
LA 20 0 1
10 2 3
SF 10 4 5
10 6 7
20 8 9

In [10]:
pd.merge(df_left_hr,df_right_hr,left_on=['key1','key2'],right_index=True)


Out[10]:
data_set key1 key2 col_1 col_2
0 0.0 SF 10 4 5
0 0.0 SF 10 6 7
1 1.0 SF 20 8 9
3 3.0 LA 20 0 1

In [13]:
# same as using merge
# join() can receive same args as merge
df_left.join(df_right)


Out[13]:
data key group_data
0 0 X NaN
1 1 Y NaN
2 2 Z NaN
3 3 X NaN
4 4 Y NaN

In [ ]: