In [1]:
import numpy as np
import pandas as pd
In [2]:
A = pd.DataFrame({'key': ['s1', 's2', 's3', 's4'],
                  'xvalue': [1, 2, 3, 5],
                  'group':['a' , 'a' , 'b' , 'b']})
In [3]:
B = pd.DataFrame({'key': ['f1', 'f2', 'f3', 'f4'],
                  'yvalue': [6, 7, 8, 9]})
In [4]:
A
Out[4]:
key xvalue group
0 s1 1 a
1 s2 2 a
2 s3 3 b
3 s4 5 b
In [5]:
B
Out[5]:
key yvalue
0 f1 6
1 f2 7
2 f3 8
3 f4 9
In [6]:
left = pd.DataFrame({'a': [1, 2, 3, 5], 'left_val': ['s1', 's2', 's3', 's4']})
In [7]:
left
Out[7]:
a left_val
0 1 s1
1 2 s2
2 3 s3
3 5 s4
In [8]:
right = pd.DataFrame({'b': [6, 7, 8, 9], 'left_val': ['f1', 'f2', 'f3', 'f4']})
In [9]:
right
Out[9]:
b left_val
0 6 f1
1 7 f2
2 8 f3
3 9 f4
In [10]:
pd.merge_ordered(left, right)
Out[10]:
a left_val b
0 NaN f1 6.0
1 NaN f2 7.0
2 NaN f3 8.0
3 NaN f4 9.0
4 1.0 s1 NaN
5 2.0 s2 NaN
6 3.0 s3 NaN
7 5.0 s4 NaN
In [11]:
pd.merge_ordered(A, B, fill_method='ffill', left_by='group')
Out[11]:
key xvalue group yvalue
0 f1 NaN a 6
1 f2 NaN a 7
2 f3 NaN a 8
3 f4 NaN a 9
4 s1 1.0 a 9
5 s2 2.0 a 9
6 f1 NaN b 6
7 f2 NaN b 7
8 f3 NaN b 8
9 f4 NaN b 9
10 s3 3.0 b 9
11 s4 5.0 b 9