Я предполагаю, что значения уникальны в B ['ECode'] и B ['F Gping'], в противном случае нам придется выбирать, какое значение мы даем A ['EDesc'], когда мы находим два совпадающих значениядля ECode или FG.
Возможно, есть более разумный способ, но вот что я бы сделал с объединениями:
Пример фреймов данных:
A = pd.DataFrame({'ECode': [1, 1, 3, 4, 6],
'FG': ['a', 'b', 'c', 'b', 'y']})
B = pd.DataFrame({'ECode': [1, 2, 3, 5],
'F Gping': ['b', 'c', 'x', 'x'],
'EDesc': ['a', 'b', 'c', 'd']})
Так они выглядят так:
A
ECode FG
0 1 a
1 1 b
2 3 c
3 4 b
4 6 y
B
ECode F Gping EDesc
0 1 b a
1 2 c b
2 3 x c
3 5 x d
Сначала давайте создадим A ['EDesc'], сказав, что это результат объединения A и B в ECode.Мы временно будем использовать EDesc в качестве индекса:
A.set_index('ECode', inplace=True, drop=False)
B.set_index('ECode', inplace=True, drop=False)
A['EDesc'] = A.join(B, lsuffix='A')['EDesc']
Это работает, потому что результат A.join (B, lsuffix = 'A'):
ECodeA FG ECode F Gping EDesc
ECode
1 1 a 1.0 b a
1 1 b 1.0 b a
3 3 c 3.0 x c
4 4 b NaN NaN NaN
6 6 y NaN NaN NaN
Теперь давайте заполнимна A ['EDesc'], используя совпадение на FG.То же самое:
A.set_index('FG', inplace=True, drop=False)
B.set_index('F Gping', inplace=True, drop=False)
A['EDesc'].fillna(A.join(B, lsuffix='A')['EDesc'].drop_duplicates(), inplace=True)
Это работает, потому что результат A.join (B, lsuffix = 'A'):
ECodeA FG EDescA ECode F Gping EDesc
a 1 a a NaN NaN NaN
b 1 b a 1.0 b a
b 4 b NaN 1.0 b a
c 3 c c 2.0 c b
y 6 y NaN NaN NaN NaN
Также мы удалили дубликаты, потому что, как вы можетевидим, что в нашем индексе два b.
Наконец, давайте заполним "Missing" и сбросим индекс:
A['EDesc'].fillna('Missing', inplace=True)
A.reset_index(drop=True, inplace=True)