给定具有MultiIndex的DataFrame A和具有一维索引的DataFrame B,如何使用B中的新值更新A的列值,其中B的索引应与A的第二个索引标签匹配。
测试数据:
begin = [10, 10, 12, 12, 14, 14]
end = [10, 11, 12, 13, 14, 15]
values = [1, 2, 3, 4, 5, 6]
values_updated = [10, 20, 3, 4, 50, 60]
multiindexed = pd.DataFrame({'begin': begin,
'end': end,
'value': values})
multiindexed.set_index(['begin', 'end'], inplace=True)
singleindexed = pd.DataFrame.from_dict(dict(zip([10, 11, 14, 15],
[10, 20, 50, 60])),
orient='index')
singleindexed.columns = ['value']
理想的结果应该是
value
begin end
10 10 10
11 20
12 12 3
13 4
14 14 50
15 60
现在我正在考虑
的变体multiindexed.update(singleindexed)
我搜索了DataFrame.update
的文档,但是找不到任何东西w.r.t.索引处理。
我错过了一种更简单的方法来实现这一目标吗?
答案 0 :(得分:1)
您可以使用loc
选择multiindexed
中的数据,然后按values
设置新值:
print singleindexed.index
Int64Index([10, 11, 14, 15], dtype='int64')
print singleindexed.values
[[10]
[20]
[50]
[60]]
idx = pd.IndexSlice
print multiindexed.loc[idx[:, singleindexed.index],:]
value
start end
10 10 1
11 2
14 14 5
15 6
multiindexed.loc[idx[:, singleindexed.index],:] = singleindexed.values
print multiindexed
value
start end
10 10 10
11 20
12 12 3
13 4
14 14 50
15 60