Python 熊猫通过iloc而不是索引减去序列
我有两个pd系列: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 实际结果是: >>>
>>> 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