diff --git a/pandas/core/groupby/ops.py b/pandas/core/groupby/ops.py index 65b9144c0ddc9..f54539a4945b8 100644 --- a/pandas/core/groupby/ops.py +++ b/pandas/core/groupby/ops.py @@ -235,7 +235,7 @@ def size(self): if ngroup: out = np.bincount(ids[ids != -1], minlength=ngroup) else: - out = ids + out = [] return Series(out, index=self.result_index, dtype='int64') diff --git a/pandas/tests/groupby/test_transform.py b/pandas/tests/groupby/test_transform.py index 7fccf1f57a886..758f215c00fa5 100644 --- a/pandas/tests/groupby/test_transform.py +++ b/pandas/tests/groupby/test_transform.py @@ -782,3 +782,16 @@ def test_any_all_np_func(func): res = df.groupby('key')['val'].transform(func) tm.assert_series_equal(res, exp) + + +@pytest.mark.parametrize("input_df, expected", [ + (DataFrame({'groups': [np.nan, np.nan, np.nan], 'values': [1, 2, 3]}), + Series([np.nan, np.nan, np.nan], name='values')), + (DataFrame({'groups': [np.nan, 'A', 'A', 'B', 'B'], 'values': range(5)}), + Series([np.nan, 3, 3, 7, 7], name='values')) +]) +def test_transform_with_all_nan(input_df, expected): + # GH 21624 + grouped = input_df.groupby('groups') + result = grouped['values'].transform('sum') + tm.assert_series_equal(result, expected)