Кажется, я нигде не могу найти этот пример. Не удается определить, нужно ли мне использовать индексы, логическую маску или возможно ли прямое слияние. Я пробовал варианты .isin
и .between
каждая, но безуспешно.
Сценарий:
Два кадра данных без общего индекса :
df1 = pd.DataFrame({'printId': ['x','y', 'z', 'a'],'locCode': [0.9, 1.5, 4.0, 7.8]})
df2 = pd.DataFrame({'assetId': ['1','1a', '2', '2a', '3', '4'], 'locStart': [0.9, 0.9, 1, 1, 4, 8], 'locEnd': [0.9, 0.9, 3, 3, 5, 13]})
df1:
df2:
Нужно это:
df3 = pd.DataFrame({'printId': ['x','x', 'y', 'y', 'z', 'a', 'NaN'], 'locCode': ['0.9', '0.9', '1.5', '1.5', '4.0', '7.8', 'NaN'], 'assetID': ['1', '1a', '2', '2a', '3', 'NaN', '4'], 'locStart': ['0.9', '0.9', '1.0', '1.0', '4.0', 'NaN', '8.0'], 'locEnd':['0.9', '0.9', '3.0', '3.0', '4.0', 'NaN', '13.0']})
df3
Как специалисты решают эту проблему?
РЕДАКТИРОВАНИЕ: Оригинальный ответ не сработал после более тщательного изучения.
- Если
df2
дублирует locStart/End
записей, но уникален assetID
(строки 0, 1 и строки 2 и 3), df1
не будет объединяться.