我有两个带有多索引的数据框,如下所示:df1pd.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'}})df2pd.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'},两者的大小不一样,值也不总是重叠,但在 df1 中找到的每个索引对都在 df2 中。我想要做的是使用observationdf2 中的值更新 df1 中的观察 col ,无论它在哪里匹配。换句话说,我想做一个基于多索引的内部连接,然后observation用 df2 中的值覆盖df1 中的值。但是有没有一种方法可以一步做到这一点,使用loc/indexing?(这是一个索引问题,但如果有办法解决它reset_index(),那也很好。)期望的输出: obs00 04 30 08 02 09 16 10 26 16 2601 01 30 07 1602 08 0203 13 2607 15 26
1 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
如果我理解正确,你可以这样做:
df2 = 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'): 'yellow',
('bar', '2017-04-27'): 'white',
('foo', '2017-05-16'): 'black',
('foo', '2017-04-25'): 'red',
('zip', '2017-08-16'): 'red'}})
df['observation'] = df.index.map(dict(zip(df2.index, df2.observation)))
输出
observation
bar 2017-04-27 white
foo 2017-04-25 red
2017-05-16 black
zap 2017-04-16 yellow
zip 2017-08-16 red
添加回答
举报
0/150
提交
取消