多索引DataFrame合并:非NaN更新数据+新增索引追加
多索引DataFrame合并的单行高效解法
你要的需求可以直接用df_updates.combine_first(df_base)这一行代码实现,完全匹配你的两个规则:
- 规则1(新数据为NaN保留旧数据):
combine_first的逻辑是优先取调用者(df_updates)的非NaN值,只有当df_updates对应位置为NaN时,才会用df_base的值填充,正好贴合你的要求。 - 规则2(追加基表不存在的索引):该方法会自动保留两个DataFrame中所有的多索引项,包括
df_updates里df_base没有的新索引,无需额外处理。
验证示例
import pandas as pd import numpy as np # 构造多索引测试数据 index_base = pd.MultiIndex.from_tuples([('A', 'x'), ('A', 'y'), ('B', 'x')], names=['level1', 'level2']) df_base = pd.DataFrame({'value': [1, 2, 3]}, index=index_base) index_updates = pd.MultiIndex.from_tuples([('A', 'x'), ('B', 'y'), ('C', 'x')], names=['level1', 'level2']) df_updates = pd.DataFrame({'value': [np.nan, 4, 5]}, index=index_updates) # 单行合并 merged_df = df_updates.combine_first(df_base) print(merged_df)
输出结果:
value level1 level2 A x 1.0 y 2.0 B x 3.0 y 4.0 C x 5.0
效率说明
combine_first是Pandas内置的矢量化操作,比你之前用的update + combine_first更高效——它不需要先拷贝基表再执行update操作,直接一步完成合并逻辑,在处理大数据集时优势更明显。
内容的提问来源于stack exchange,提问作者bambangkode
相关产品推荐
相关产品推荐

