TYP: mostly DataFrame return overloads
- `DataFrame.any/bool` return `bool` when `axis=None` and `Series` otherwise
- `DataFrame.sum/prod` currently always returns a `Series` (but will return anything when `axis=None` in the future)
- `DataFrame.mean/median/var/std/skew/kurt` return `Series` when `axis` is not `None` and potentially anything when `axis=None`

I assume it is fine to directly use keyword-only arguments in NDFrame as it is private(?), and Series+DataFrame overwrite the methods in question.
The keyword-only changes do not seem to be needed by mypy/pyright: can revert those changes (DataFrame.any is already keyword-only, but DataFrame.all/min//sum/... aren't) > The keyword-only changes do not seem to be needed by mypy/pyright: can revert those changes (DataFrame.any is already keyword-only, but DataFrame.all/min//sum/... aren't)

xref #57087 (I'm also in favor of keyword-only) @mroeschke Let me know if I should try to outsource some of the changes to a separate PR to make it easier to review. The keyword-only changes caused many changes: typing overloads and fixing positional usage in the tests and docs. Yeah could you break out the keyword-only deprecation into it's own PR separate from the misc typing changes? > Yeah could you break out the keyword-only deprecation into it's own PR separate from the misc typing changes?

I removed the keyword-deprecation decorators Thanks @twoertwein 