Python 熊猫通过iloc而不是索引减去序列

Python 熊猫通过iloc而不是索引减去序列,python,pandas,Python,Pandas,我有两个pd系列: >>> a = pd.Series([1,2,3],index=[1,2,3]) >>> b = pd.Series([2,3,4],index=[2,3,4]) 我想根据元素“.iloc”减去这两个序列,而不是索引,然后返回第一个(或第二个,我不在乎,真的)序列的索引 期望输出: >>> a - b 1 -1 2 -1 3 -1 dtype: float64 实际结果是: >>>

我有两个pd系列:

>>> a = pd.Series([1,2,3],index=[1,2,3])
>>> b = pd.Series([2,3,4],index=[2,3,4])
我想根据元素“
.iloc
”减去这两个序列,而不是索引,然后返回第一个(或第二个,我不在乎,真的)
序列的索引

期望输出:

>>> a - b
1    -1
2    -1
3    -1
dtype: float64
实际结果是:

>>> a - b
1    NaN
2    0.0
3    0.0
4    NaN
dtype: float64

您可以通过访问
numpy
数组表示来执行此操作:

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

print(res)

# 1   -1
# 2   -1
# 3   -1
# dtype: int64
这是我的推荐。
但是,我将向您展示如何在
pandas.Series

a.values[:] -= b.values
a

1   -1
2   -1
3   -1
dtype: int64
您也可以通过以下方式执行相同的操作:

a.loc[:] -= b.values


使用
loc
iloc
更为惯用。

这不就是简单的
a-b.values
?@DSM吗,这也会起作用。我这样做是为了让OP可以轻松地在使用
a.index
b.index
之间切换,因为这是唯一的“移动部分”。@Scott,我很清楚:)@jpp:这似乎需要输入很多字符才能轻松切换,因为我们可以只使用
a.values-b
,但YMMV..有时我喜欢说得冗长:)。你当然是对的。请发布替代方案,啊,我看到pir已经同意@DSM的评论。基于这个原因,我接受了包含他评论的答案。
a.iloc[:] -= b.values