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

如何按iloc而非索引对两个Pandas Series做减法并保留指定索引

按位置而非索引对Series进行减法运算

这个问题很典型——pandas默认的算术运算都是按索引对齐的,所以直接a - b会把相同索引的元素相减,没有匹配的就返回NaN,这就是你看到的结果。要实现按位置(iloc对应的位置)相减,同时保留原Series的索引,有几种简单的方法:

方法1:直接操作数值数组(最简洁)

利用Series的values属性获取底层的numpy数组,数组运算会严格按位置对应,之后再用原Series的索引重新构造结果:

import pandas as pd

a = pd.Series([1,2,3],index=[1,2,3])
b = pd.Series([2,3,4],index=[2,3,4])

result = pd.Series(a.values - b.values, index=a.index)
print(result)

输出:

1   -1
2   -1
3   -1
dtype: float64

方法2:重置索引后运算(更贴合pandas风格)

先把两个Series的索引都重置为默认的0-based索引,这样运算时就会按位置对齐,最后再把结果的索引改回原Series的索引:

result = (a.reset_index(drop=True) - b.reset_index(drop=True)).set_axis(a.index)
print(result)

这个方法避免直接操作numpy数组,完全用pandas的API实现,适合习惯pandas操作逻辑的场景。

为什么直接a - b得不到预期结果?

再补充下原因:pandas的核心设计之一就是索引对齐,当你对两个Series做算术运算时,它会先匹配两者的索引标签,只有索引相同的元素才会进行运算,没有匹配的位置就填充NaN。所以你的例子里,a的索引1在b中不存在,b的索引4在a中不存在,这些位置就返回NaN,而索引2、3的元素因为索引匹配,所以是2-2=0、3-3=0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:36