You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多索引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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:17:14