Pandas在MultiIndex的主要标签上播放

时间:2016-05-11 14:42:05

标签: pandas

给定具有MultiIndex的DataFrame A和具有一维索引的DataFrame B,如何使用B中的新值更新A的列值,其中B的索引应与A的第一个索引标签匹配。 A应该是"广播"跨越较低级别的索引标签。

测试数据:

begin = [10, 10, 12, 12, 14, 14]
end = [10, 11, 12, 13, 14, 15]
values = [1, 2, 3, 4, 5, 6]

mi = pd.DataFrame({'begin': begin,
                   'end': end,
                   'value': values})
mi.set_index(['begin', 'end'], inplace=True)

si = pd.DataFrame.from_dict(dict(zip([10, 12],
                                     [10, 20])), orient='index')
si.columns = ['value']

理想的结果应该是

            value
begin end       
10    10       10
      11       10
12    12       20
      13       20
14    14       5
      15       6

我试图提出一个基于Pandas DataFrame.update with MultiIndex label的解决方案,但由于DataFrame B(si)中的值较少,到目前为止无济于事。

1 个答案:

答案 0 :(得分:1)

我不知道我的决定是多么好,但请尝试一下:)

mi.update(pd.merge(mi.reset_index(), si.reset_index(), left_on='begin', right_on='index', suffixes=('_x', '')).set_index(['begin', 'end']))