BUG: mean/median with strings
- [x] closes #36703 (Replace xxxx with the GitHub issue number)
- [x] closes #44008
- [x] closes #34671
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

I'm not wild about this multi-pass implementation.  Longer-term I think we need to re-write a lot of nanops to be single-pass (zero|few)-copy.
As an aside, it feels like a non-explicit operation that strings are coerced to numeric before calling mean/median. Would be nice if it was deprecation in favor of the user explicitly casting to a numeric type > As an aside, it feels like a non-explicit operation that strings are coerced to numeric before calling mean/median. Would be nice if it was deprecation in favor of the user explicitly casting to a numeric type

That could work for mean (though eg Decimal objects may be tricky until we can tell infer those to pyarrow decimal).  For  median i actually think it can work on object dtype without casting (though may be slower), saving that for another day.

Big picture I'd like to refactor a lot of nanops to be no-copy and share code with libgroupby. Worth moving forward here or do we need to wait for a different approach? Could the behavior of strings automatically being coerced to numbers during reductions be deprecated instead of supporting them? > Could the behavior of strings automatically being coerced to numbers during reductions be deprecated instead of supporting them?

I'm not clear on how that is different from what this does (aside from calling it a bugfix instead of a deprecation) Ah okay sorry. Could you mention in the whatsnew that this raises a `TypeError` now?  Thanks @jbrockmendel 