Daniel Fortunov
Daniel Fortunov

Reputation: 44323

Comparing pandas.Series for equality when they are in different orders

Pandas automatically aligns data indices of Series objects before applying the binary operators such as addition and subtraction, but this is not done when checking for equality. Why is this, and how do I overcome it?

Consider the following example:

In [15]: x = pd.Series(index=["A", "B", "C"], data=[1,2,3])

In [16]: y = pd.Series(index=["C", "B", "A"], data=[3,2,1])

In [17]: x
Out[17]:
A    1
B    2
C    3
dtype: int64

In [18]: y
Out[18]:
C    3
B    2
A    1
dtype: int64

In [19]: x==y
Out[19]:
A    False
B     True
C    False
dtype: bool

In [20]: x-y
Out[20]:
A    0
B    0
C    0
dtype: int64

I am using pandas 0.12.0.

Upvotes: 6

Views: 1483

Answers (1)

joris
joris

Reputation: 139162

You can overcome it with:

In [5]: x == y.reindex(x.index)
Out[5]: 
A    True
B    True
C    True
dtype: bool

or

In [6]: x.sort_index() == y.sort_index()
Out[6]: 
A    True
B    True
C    True
dtype: bool

The 'why' is explained here: https://github.com/pydata/pandas/issues/1134#issuecomment-5347816

Update: there is an issue that dicusses this (https://github.com/pydata/pandas/issues/1134) and a PR to fix this (https://github.com/pydata/pandas/pull/6860)

Upvotes: 5

Related Questions