使用 iloc 而不是索引来减去 Pandas 系列。

3

我有两个 pd.Series

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

我想根据元素的.iloc而不是索引来减去这两个序列,然后返回第一个(或第二个,我真的不在乎)Series的索引。
期望输出:
>>> a - b
1    -1
2    -1
3    -1
dtype: float64

实际输出的是:
>>> a - b
1    NaN
2    0.0
3    0.0
4    NaN
dtype: float64
2个回答

4
您可以通过访问 numpy 数组表示来实现此操作:
res = pd.Series(a.values - b.values, index=a.index)

print(res)

# 1   -1
# 2   -1
# 3   -1
# dtype: int64

3
那不就是 a - b.values 吗? - DSM
1
@DSM,那样也可以。我这样做是为了让OP能够轻松地在使用a.indexb.index之间切换,因为这是唯一的“移动部分”。 - jpp
@Scott,我非常了解那个:)。 - jpp
@jpp:看起来这是一个很长的字符,用于简单的翻转,我们可以直接使用a.values - b,但具体情况可能有所不同。 - DSM
有时候我喜欢啰嗦一点:)。当然,你是对的。请发表另一种选择,啊,我看到pir已经发表了。 - jpp

3

我推荐使用@DSM的评论
然而,我将展示如何在pandas.Series中原位进行此操作。

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

1   -1
2   -1
3   -1
dtype: int64

您也可以使用以下方法进行操作:
a.loc[:] -= b.values

或者

a.iloc[:] -= b.values

使用lociloc更符合Pandas的惯用语。


同意@DSM的评论。出于这个原因,我已经接受了包含他的评论的答案。 - Him

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接