如何在Pandas中替换MultiIndex DataFrame指定层级的子DataFrame
替换MultiIndex DataFrame特定索引层级内容的方法
没问题,我来帮你搞定这个需求!其实操作起来很简单,分两步走:先删掉你想替换的旧行,再把新的DataFrame合并进去就行。我给你举个具体的代码例子,完全贴合你的需求:
1. 先构造原DataFrame
首先我们按照你描述的结构创建初始的MultiIndex DataFrame:
import pandas as pd # 原DataFrame:索引是('a',1)对应值2,('b',3)对应值4 df = pd.DataFrame( data=[2, 4], index=pd.MultiIndex.from_tuples([('a', 1), ('b', 3)], names=['level1', 'level2']), columns=['value'] )
此时原df的结构是:
value level1 level2 a 1 2 b 3 4
2. 创建要替换进去的新DataFrame
接下来创建你想要替换的新数据,这里对应('b',10)和('b',11),值分别为10和11:
new_df = pd.DataFrame( data=[10, 11], index=pd.MultiIndex.from_tuples([('b', 10), ('b', 11)], names=['level1', 'level2']), columns=['value'] )
3. 执行替换操作
先删除原df中你要替换的那一行(也就是索引('b',3)的行),然后把删除后的df和新df合并,最后可以排序索引保持整洁:
# 删除目标行 df = df.drop(('b', 3)) # 合并数据并排序索引 result_df = pd.concat([df, new_df]).sort_index()
最终结果
执行完上面的代码后,result_df的结构就是你想要的:
value level1 level2 a 1 2 b 10 10 b 11 11
如果你的原DataFrame更复杂(比如'b'下面有多个行,只需要替换其中一个),这个方法同样适用——只要精准删除你要替换的索引行,再合并新数据就好。
内容的提问来源于stack exchange,提问作者menrva
相关产品推荐
相关产品推荐

