diff --git a/pandas/core/ops/__init__.py b/pandas/core/ops/__init__.py index 4f027843fbac1..1f658296a559e 100644 --- a/pandas/core/ops/__init__.py +++ b/pandas/core/ops/__init__.py @@ -785,18 +785,9 @@ def _combine_series_frame(self, other, func, fill_value=None, axis=None, level=N return self._combine_match_index(other, func, level=level) else: return self._combine_match_columns(other, func, level=level) - else: - if not len(other): - return self * np.nan - - if not len(self): - # Ambiguous case, use _series so works with DataFrame - return self._constructor( - data=self._series, index=self.index, columns=self.columns - ) - # default axis is columns - return self._combine_match_columns(other, func, level=level) + # default axis is columns + return self._combine_match_columns(other, func, level=level) def _align_method_FRAME(left, right, axis): diff --git a/pandas/tests/frame/test_arithmetic.py b/pandas/tests/frame/test_arithmetic.py index fc3640503e385..da399750c9bcd 100644 --- a/pandas/tests/frame/test_arithmetic.py +++ b/pandas/tests/frame/test_arithmetic.py @@ -663,3 +663,34 @@ def test_operations_with_interval_categories_index(self, all_arithmetic_operator result = getattr(df, op)(num) expected = pd.DataFrame([[getattr(n, op)(num) for n in data]], columns=ind) tm.assert_frame_equal(result, expected) + + +def test_frame_with_zero_len_series_corner_cases(): + # GH#28600 + # easy all-float case + df = pd.DataFrame(np.random.randn(6).reshape(3, 2), columns=["A", "B"]) + ser = pd.Series(dtype=np.float64) + + result = df + ser + expected = pd.DataFrame(df.values * np.nan, columns=df.columns) + tm.assert_frame_equal(result, expected) + + result = df == ser + expected = pd.DataFrame(False, index=df.index, columns=df.columns) + tm.assert_frame_equal(result, expected) + + # non-float case should not raise on comparison + df2 = pd.DataFrame(df.values.view("M8[ns]"), columns=df.columns) + result = df2 == ser + expected = pd.DataFrame(False, index=df.index, columns=df.columns) + tm.assert_frame_equal(result, expected) + + +def test_zero_len_frame_with_series_corner_cases(): + # GH#28600 + df = pd.DataFrame(columns=["A", "B"], dtype=np.float64) + ser = pd.Series([1, 2], index=["A", "B"]) + + result = df + ser + expected = df + tm.assert_frame_equal(result, expected)