python - 如何从另一个数据帧更新多索引数据帧?
问题描述
我有一个看起来像这样的 DataFrame:
Something1 Something2
date 2020-03-30 2020-03-31 2020-04-01 2020-03-30 2020-03-31 2020-04-01
index_1 index_2 index_3 index_4
A0 B0 C0 D0 10 NaN 11 'bla' 'bli' 'blo'
A1 B1 C1 D1 8 NaN NaN 'bla1' 'bli1 'blo1'
A2 B2 C2 D0 0 NaN 303 'bla2' 'bli2' 'blo2'
当 index_[1|2|3|4] 是 MultiIndex 时。Some[1|2] 是第一级列。并且日期是重复的第二级列,它们在 Something[1|2] 第一级列中是相同的。
现在,我得到了一个不同的表,其中包含我想用我当前的表来丰富的值。新表如下所示:
index_4 date val
D0 2020-03-30 8
D0 2020-03-31 9
...
D1 2020-03-30 17
D1 2020-03-31 33
我想用旧表来丰富旧表。
我的问题是:如何使用新表填充旧表 - 当我只想在 中设置值时Something1
,它看起来像(2020-03-31
在 Something1 中的日期中填充 D0 之后):
Something1 Something2
date 2020-03-30 2020-03-31 2020-04-01 2020-03-30 2020-03-31 2020-04-01
index_1 index_2 index_3 index_4
A0 B0 C0 D0 10 9 11 'bla' 'bli' 'blo'
A1 B1 C1 D1 8 NaN NaN 'bla1' 'bli1' 'blo1'
A2 B2 C2 D0 0 9 303 'bla2' 'bli2' 'blo2'
我尝试使用set_value
,设置值xs
,at
但我找不到正确的组合来到达正确的单元格。(也在这篇文章中寻找了一些想法,但没有成功)
我想它应该看起来像这样
df.at[index_4='D0']['Something1']['2020-03-31'] = new_df['D0', '2020-03-31']['val']
解决方案
我能想到的一种方法是重塑数据,以便我们可以拥有index_4
并date
作为索引,映射值并重新整形:
df2 = df2.set_index(['date','index_4'])
s = df['S1'].unstack(level=-1).T
df['S1'] = s.apply(lambda x: x.fillna(df2['val'])).T.stack(level=-1)
推荐阅读
- java - 我在 Recyclerview 中显示来自 firebase 的图像时遇到问题
- android - 如何从链接打开应用程序而不是玩商店 - Android
- javascript - 如何在reactjs中使用地图从数组渲染引导网格
- floating-point - 这个二进制乘法是如何完成的?
- python - 请求获取状态码 401。我做错了什么
- regex - 正则表达式:保持在同一行中多次找到相同的模式,并通过在前面附加单个模式来替换行
- math - 绘制 4 维和 3 维数据 - matlab
- javascript - php发送邮件如何发送带有文件附件的邮件
- c - 打印背包的值
- opengl - 没有明确指定绑定点索引的多个 UBO