Repository: pandas-dev/pandas
Pull request: BUG: Regression in Resample.apply raised error when apply affected only a Series
- [x] closes #36951
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Error was no longer caught as before.

Sorry made a mistake when pushing...

Problem statement:
REGR: resample apply fails with KeyError/AttributeError for function that works on DataFrame but fails on Series
A resample `apply` accessing a column of the subsetted dataframe fails (bubbling up the error from first trying the function on a single column, i.e. a Series):

```
In [25]: df = pd.DataFrame({"col": range(10)}, index=pd.date_range("2012-01-01", periods=10, freq="20min"))  

In [26]: df.resample("H").apply(lambda group: len(group['col'].unique()))   
...
KeyError: 'col'

In [27]: df.resample("H").apply(lambda group: len(group.col.unique())) 
...
AttributeError: 'Series' object has no attribute 'col'
```

This seems a regression, or was there a deliberate change in `apply` to only apply it on the columns and no longer on the full DataFrame ? 
cc @jbrockmendel

Hints from issue discussion:
i dont think this was intentional

Commit message: BUG: Regression in Resample.apply raised error when apply affected only a Series

Patch to review:
diff --git a/doc/source/whatsnew/v1.1.4.rst b/doc/source/whatsnew/v1.1.4.rst
index 6892fb62028c9..6e365e2fff15c 100644
--- a/doc/source/whatsnew/v1.1.4.rst
+++ b/doc/source/whatsnew/v1.1.4.rst
@@ -20,6 +20,7 @@ Fixed regressions
 - Fixed regression in :class:`RollingGroupby` with ``sort=False`` not being respected (:issue:`36889`)
 - Fixed regression in :meth:`Series.astype` converting ``None`` to ``"nan"`` when casting to string (:issue:`36904`)
 - Fixed regression in :class:`RollingGroupby` causing a segmentation fault with Index of dtype object (:issue:`36727`)
+- Fixed regression in :meth:`Resample.apply` raised ``AttributeError`` when input was a :class:`DataFrame` and only a :class:`Series` was evaluated (:issue:`36951`)
 
 .. ---------------------------------------------------------------------------
 
diff --git a/pandas/core/resample.py b/pandas/core/resample.py
index 3f1b1dac080a7..76accdb240653 100644
--- a/pandas/core/resample.py
+++ b/pandas/core/resample.py
@@ -369,8 +369,9 @@ def _groupby_and_aggregate(self, how, grouper=None, *args, **kwargs):
                 result = grouped._aggregate_item_by_item(how, *args, **kwargs)
             else:
                 result = grouped.aggregate(how, *args, **kwargs)
-        except DataError:
+        except (DataError, AttributeError):
             # we have a non-reducing function; try to evaluate
+            # alternatively we want to evaluate only a column of the input
             result = grouped.apply(how, *args, **kwargs)
         except ValueError as err:
             if "Must produce aggregated value" in str(err):
diff --git a/pandas/tests/resample/test_resampler_grouper.py b/pandas/tests/resample/test_resampler_grouper.py
index 73bf7dafac254..5c7f2ce68212e 100644
--- a/pandas/tests/resample/test_resampler_grouper.py
+++ b/pandas/tests/resample/test_resampler_grouper.py
@@ -347,3 +347,16 @@ def test_median_duplicate_columns():
     result = df.resample("5s").median()
     expected.columns = result.columns
     tm.assert_frame_equal(result, expected)
+
+
+def test_apply_to_one_column_of_df():
+    # GH: 36951
+    df = pd.DataFrame(
+        {"col": range(10), "col1": range(10, 20)},
+        index=pd.date_range("2012-01-01", periods=10, freq="20min"),
+    )
+    result = df.resample("H").apply(lambda group: group.col.sum())
+    expected = pd.Series(
+        [3, 12, 21, 9], index=pd.date_range("2012-01-01", periods=4, freq="H")
+    )
+    tm.assert_series_equal(result, expected)


Code review comments:
diff_hunk: @@ -20,6 +20,7 @@ Fixed regressions
 - Fixed regression in :class:`RollingGroupby` with ``sort=False`` not being respected (:issue:`36889`)
 - Fixed regression in :meth:`Series.astype` converting ``None`` to ``"nan"`` when casting to string (:issue:`36904`)
 - Fixed regression in :class:`RollingGroupby` causing a segmentation fault with Index of dtype object (:issue:`36727`)
+- Fixed regression in :meth:`Resample.apply` raised ``AttributeError`` when input was a :class:`DataFrame` and only a :class:`Series` was evaluated (:issue:`36951`)
path: doc/source/whatsnew/v1.1.4.rst
text: @user1:
i don't think will render for Resample you need to fully qualified method (look around for examples in this whatsnew or others)

@author:
Thanks found an example