diff --git a/pandas/core/ops/docstrings.py b/pandas/core/ops/docstrings.py index 5ce0a2da86f31..d97880f133306 100644 --- a/pandas/core/ops/docstrings.py +++ b/pandas/core/ops/docstrings.py @@ -435,8 +435,10 @@ def make_flex_doc(op_name: str, typ: str) -> str: Parameters ---------- -other : Series or scalar value - The second operand in this operation. +other : object + When a Series is provided, will align on indexes. For all other types, + will behave the same as ``==`` but with possibly different results due + to the other arguments. level : int or name Broadcast across a level, matching Index values on the passed MultiIndex level. diff --git a/pandas/core/series.py b/pandas/core/series.py index 63c9963fb7eac..6b3bebceb9004 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -6072,8 +6072,10 @@ def eq( Parameters ---------- - other : Series or scalar value - The second operand in this operation. + other : object + When a Series is provided, will align on indexes. For all other types, + will behave the same as ``==`` but with possibly different results due + to the other arguments. level : int or name Broadcast across a level, matching Index values on the passed MultiIndex level. @@ -6141,8 +6143,10 @@ def le(self, other, level=None, fill_value=None, axis: Axis = 0) -> Series: Parameters ---------- - other : Series or scalar value - The second operand in this operation. + other : object + When a Series is provided, will align on indexes. For all other types, + will behave the same as ``==`` but with possibly different results due + to the other arguments. level : int or name Broadcast across a level, matching Index values on the passed MultiIndex level. @@ -6213,8 +6217,10 @@ def ge(self, other, level=None, fill_value=None, axis: Axis = 0) -> Series: Parameters ---------- - other : Series or scalar value - The second operand in this operation. + other : object + When a Series is provided, will align on indexes. For all other types, + will behave the same as ``==`` but with possibly different results due + to the other arguments. level : int or name Broadcast across a level, matching Index values on the passed MultiIndex level. diff --git a/pandas/tests/series/methods/test_compare.py b/pandas/tests/series/methods/test_compare.py index 2a57d5139b62c..fdc717d9fe74c 100644 --- a/pandas/tests/series/methods/test_compare.py +++ b/pandas/tests/series/methods/test_compare.py @@ -1,3 +1,8 @@ +from enum import ( + Enum, + auto, +) + import numpy as np import pytest @@ -138,3 +143,47 @@ def test_compare_datetime64_and_string(): tm.assert_series_equal(result_eq1, expected_eq) tm.assert_series_equal(result_eq2, expected_eq) tm.assert_series_equal(result_neq, expected_neq) + + +def test_eq_objects(): + """Test eq with Enum and List elements""" + + class Thing(Enum): + FIRST = auto() + SECOND = auto() + + left = pd.Series([Thing.FIRST, Thing.SECOND]) + tm.assert_series_equal(left.eq(Thing.FIRST), left == Thing.FIRST) + + py_l = [Thing.FIRST, Thing.SECOND] + tm.assert_series_equal(left.eq(py_l), left == py_l) + + np_a = np.asarray(py_l) + tm.assert_series_equal(left.eq(np_a), left == np_a) + + pd_s = pd.Series(py_l) + tm.assert_series_equal(left.eq(pd_s), left == pd_s) + + left_non_scalar = pd.Series([[1, 2], [3, 4]]) + with pytest.raises(AssertionError): + tm.assert_series_equal(left_non_scalar.eq([1, 2]), pd.Series([True, False])) + + +def test_eq_with_index(): + """Test eq with non-trivial indices""" + left = pd.Series([1, 2], index=[1, 0]) + + py_l = [1, 2] + tm.assert_series_equal(left.eq(py_l), left == py_l) + + np_a = np.asarray(py_l) + tm.assert_series_equal(left.eq(np_a), left == np_a) + + pd_s = pd.Series(py_l) + tm.assert_series_equal(left.eq(pd_s), pd.Series([False, False])) + + match = r"Can only compare identically-labeled Series objects" + with pytest.raises(ValueError, match=match): + _ = left == pd_s + + tm.assert_series_equal(left.eq(pd.Series([2, 1])), pd.Series([True, True]))