diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 64d874a31c428..09616cc38212b 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -3272,7 +3272,10 @@ def first(x: Series): """Helper function for first item that isn't NA.""" arr = x.array[notna(x.array)] if not len(arr): - return np.nan + nan_arr = x.array[isna(x.array)] + if not len(nan_arr): + return np.nan + return nan_arr[0] return arr[0] if isinstance(obj, DataFrame): @@ -3331,7 +3334,10 @@ def last(x: Series): """Helper function for last item that isn't NA.""" arr = x.array[notna(x.array)] if not len(arr): - return np.nan + nan_arr = x.array[isna(x.array)] + if not len(nan_arr): + return np.nan + return nan_arr[-1] return arr[-1] if isinstance(obj, DataFrame): diff --git a/pandas/tests/extension/json/test_json.py b/pandas/tests/extension/json/test_json.py index 0920e70142446..fb2208b304f9e 100644 --- a/pandas/tests/extension/json/test_json.py +++ b/pandas/tests/extension/json/test_json.py @@ -356,10 +356,6 @@ def test_groupby_extension_no_sort(self): """ super().test_groupby_extension_no_sort() - @pytest.mark.xfail(reason="GH#39098: Converts agg result to object") - def test_groupby_agg_extension(self, data_for_grouping): - super().test_groupby_agg_extension(data_for_grouping) - class TestArithmeticOps(BaseJSON, base.BaseArithmeticOpsTests): def test_arith_frame_with_scalar(self, data, all_arithmetic_operators, request): diff --git a/pandas/tests/extension/test_boolean.py b/pandas/tests/extension/test_boolean.py index 63ae2b629e549..fb8e8803bdbb3 100644 --- a/pandas/tests/extension/test_boolean.py +++ b/pandas/tests/extension/test_boolean.py @@ -48,7 +48,7 @@ def data_for_twos(dtype): @pytest.fixture def data_missing(dtype): - return pd.array([np.nan, True], dtype=dtype) + return pd.array([pd.NA, True], dtype=dtype) @pytest.fixture @@ -58,7 +58,7 @@ def data_for_sorting(dtype): @pytest.fixture def data_missing_for_sorting(dtype): - return pd.array([True, np.nan, False], dtype=dtype) + return pd.array([True, pd.NA, False], dtype=dtype) @pytest.fixture @@ -76,7 +76,7 @@ def na_value(): def data_for_grouping(dtype): b = True a = False - na = np.nan + na = pd.NA return pd.array([b, b, na, na, a, a, b], dtype=dtype) @@ -147,7 +147,7 @@ def _check_op(self, obj, op, other, op_name, exc=NotImplementedError): expected = expected.astype("Float64") if op_name == "__rpow__": # for rpow, combine does not propagate NaN - expected[result.isna()] = np.nan + expected[result.isna()] = pd.NA self.assert_equal(result, expected) else: with pytest.raises(exc):