У меня есть два кадра данных с мультииндексами, которые выглядят так:
df1
pd.DataFrame({'observation': {('foo', '2017-04-16'): 'green',
('bar', '2017-04-25'): 'red',
('zap', '2017-04-16'): 'red',
('zip', '2017-04-25'): 'blue',
('zip', '2017-04-16'): 'white'},
'observation': {('zap', '2017-04-16'): np.nan,
('bar', '2017-04-27'): 'white',
('foo', '2017-05-16'): np.nan,
('foo', '2017-04-25'): 'red',
('zip', '2017-08-16'): 'red'}})
df2
pd.DataFrame({'foo': {('00', '08'): '0.0',
('01', '08'): '0.0',
('01', '08'): '0.0',
('00', '08'): '1.0',
('03', '08'): '1.0',
('06', '08'): '0.0',
('00', '08'): '1.0',
('00', '08'): '1.0',
('00', '08'): '0.0',
('02', '08'): '0.0'},
'client_id': {('00', '08'): '1.0',
('01', '08'): '1.0',
('01', '08'): '1.0',
('00', '08'): '1.0',
('03', '08'): '1.0',
('06', '08'): '1.0',
('00', '08'): '1.0',
('00', '08'): '1.0',
('00', '08'): '1.0',
('02', '08'): '1.0'},
'execution_date': {('00', '08'): '2019-01-09',
('01', '08'): '2019-01-09',
('01', '08'): '2019-01-09',
('00', '08'): '2019-01-09',
('03', '08'): '2019-01-09',
('06', '08'): '2019-01-09',
('00', '08'): '2019-01-09',
('00', '08'): '2019-01-09',
('00', '08'): '2019-01-09',
('02', '08'): '2019-01-09'},
'del': {('00', '08'): '0.0',
('01', '08'): '0.0',
('01', '08'): '0.0',
('00', '08'): '0.0',
('03', '08'): '0.0',
('06', '08'): '0.0',
('00', '08'): '0.0',
('00', '08'): '0.0',
('00', '08'): '0.0',
('02', '08'): '0.0'},
'act': {('00', '08'): '11',
('01', '08'): '03',
('01', '08'): '06',
('00', '08'): '07',
('03', '08'): '07',
('06', '08'): '11',
('00', '08'): '28',
('00', '08'): '08',
('00', '08'): '14',
('02', '08'): '26'},
'obs': {('00', '08'): '02',
('01', '08'): '02',
('01', '08'): '02',
('00', '08'): '02',
('03', '08'): '02',
('06', '08'): '02',
('00', '08'): '02',
('00', '08'): '02',
('00', '08'): '02',
('02', '08'): '02'}})
Два не имеют одинаковый размер, и значения не всегда перекрываются, но каждая пара индексов, найденная в df1, находится в df2. То, что я хотел бы сделать, это обновить col наблюдения в df1 значениями observation
в df2, где бы оно ни совпадало.
Другими словами, я хотел бы сделать эквивалент внутреннего соединения на основе мультииндекса, а затем переписать значения в observation
в df1 на значения из df2. Но есть ли способ сделать это за один шаг, используя loc
/ indexing? (Это структурировано как проблема индекса, но если есть способ решить ее, используя reset_index()
, это тоже подойдет.)
Желаемый вывод:
obs
00 04 30
08 02
09 16
10 26
16 26
01 01 30
07 16
02 08 02
03 13 26
07 15 26