如何基于索引对两个pandas Series的值进行求和运算?
解决pandas Series按索引合并运算的最佳方法
这个需求其实很常见,核心就是让两个Series按索引自动对齐,缺失索引的位置用0填充后做加法运算,最简洁高效的方式是用pandas内置的add()方法并指定fill_value参数,当然也可以用基础加法结合fillna()来实现,下面详细说明:
方法一:使用add()方法(推荐)
pandas的add()方法专门为这类索引对齐运算设计,通过fill_value参数可以直接指定当某个索引只在其中一个Series存在时,用什么值来填充缺失的那一方。代码如下:
import pandas as pd m = pd.Series([5,2,7,2], index=[0,1,2,3]) n = pd.Series([8,3], index=[0,2]) # 核心代码:用add方法指定填充值为0 z = m.add(n, fill_value=0) # 如果需要整数类型结果,可以转换 z = z.astype(int) print(z) # 输出: # 0 13 # 1 2 # 2 10 # 3 2 # dtype: int64
方法二:基础加法结合fillna()
如果你习惯用运算符的写法,也可以先把n中缺失的索引位置填充为0,再和m相加,效果是一样的:
z = m + n.fillna(0) z = z.astype(int)
为什么这是最佳方法?
- 完全利用pandas的向量化运算,比手动循环或者重新索引的方式性能高很多,尤其是处理大数据集时优势明显;
- 代码简洁易读,
fill_value参数清晰表达了“缺失值用0填充”的逻辑,维护性好; - 自动处理索引对齐,不需要手动处理索引的匹配问题,避免出错。
内容的提问来源于stack exchange,提问作者MapleSyrup
相关产品推荐
相关产品推荐

