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

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

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

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


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

In [8]:
df_left_hr = DataFrame({'key1': ['SF', 'SF', 'SF', 'LA', 'LA'], 
                         'key2': [10, 20 ,30 , 20 , 30],
                           'data_set': np.arange(5)})

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'])

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 SF 10 4 5
0 0 SF 10 6 7
1 1 SF 20 8 9
3 3 LA 20 0 1

In [11]:
df_left.join(df_right)


Out[11]:
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 [ ]: