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

如何在Pandas中对DataFrame求和并保留缺失列的原始值?

解决多DataFrame求和时保留缺失列原始值的问题

问题场景

需要对多个DataFrame执行求和操作,但部分DataFrame存在独有的缺失列。当前直接用dfa + dfb得到的结果中,这些独有的列会被填充为NaN,需求是保留这些列的原始值(比如dfa的B列、dfb的C列),且方案要适配大数据量的自动化处理。

示例代码

#!/usr/bin/env ipython
import pandas as pd
import numpy as np

N=10
years = [vv for vv in range(2010,2010+N)]
# 生成测试数据
data_a = {'years':years,'A':np.random.random(N),'B':np.random.random(N)}
data_b = {'years':years,'A':np.random.random(N),'C':np.random.random(N)}

dfa = pd.DataFrame.from_dict(data_a).set_index('years')
dfb = pd.DataFrame.from_dict(data_b).set_index('years')
# 当前求和结果(含NaN)
dfc = dfa + dfb

当前求和结果

A   B   C
years                  
2010   0.830207 NaN NaN
2011   1.237387 NaN NaN
2012   1.386908 NaN NaN
2013   0.949136 NaN NaN
2014   0.897436 NaN NaN
2015   0.375644 NaN NaN
2016   1.134836 NaN NaN
2017   1.125501 NaN NaN
2018   1.140183 NaN NaN
2019   0.522178 NaN NaN

解决方案

方法1:用combine_first自动补全(推荐)

先执行求和,再用原始DataFrame的非NaN值替换结果中的NaN,适配任意数量的DataFrame:

# 两DataFrame场景
dfc = dfa + dfb
dfc = dfc.combine_first(dfa).combine_first(dfb)

# 多DataFrame场景(可扩展为更多DataFrame的列表)
dfs = [dfa, dfb]
df_sum = sum(dfs)
for df in dfs:
    df_sum = df_sum.combine_first(df)

combine_first会优先保留当前DataFrame的值,仅用传入的DataFrame填充NaN,完美匹配“共同列求和、独有列保留原值”的需求。

方法2:用fillna手动指定列(适合列数少的场景)

如果明确知道独有的列名,也可以直接填充:

dfc = dfa + dfb
dfc['B'] = dfc['B'].fillna(dfa['B'])
dfc['C'] = dfc['C'].fillna(dfb['C'])

但此方法需要手动指定列名,不适合大数据量或列名不固定的场景。

期望结果示例

处理后的数据会保留各自独有的列原值,共同列求和:

A         B         C
years                              
2010   0.830207  0.456789  0.123456
2011   1.237387  0.789012  0.345678
2012   1.386908  0.234567  0.890123
...(其余行同理)

内容的提问来源于stack exchange,提问作者msi_gerva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:30:57