REF: Simplify _cython_functions lookup
The remaining two non-trivial cases are ("aggregate", "first") and ("aggregate", "median").  The "first" case I think is straightforward.  The "median" case I'm reticent to change because it isn't clear to me why it is a dict at all (cc @WillAyd if you have any ideas)
Hello @jbrockmendel! Thanks for updating this PR. We checked the lines you've touched for [PEP 8](https://www.python.org/dev/peps/pep-0008) issues, and found:



There are currently no PEP 8 issues detected in this Pull Request. Cheers! :beers: 

##### Comment last updated at 2019-10-30 23:16:54 UTC So I don't know off the top of my head why this design started; I know I personally added the `rank` dict following in the footsteps of `first` and `median`

My hesitation with this change is that it only seems to solve for `rank` and leaves the other two in their current state. I could be convinced otherwise but would rather seem them address altogether if we are going to make a change > My hesitation with this change is that it only seems to solve for rank and leaves the other two in their current state. I could be convinced otherwise but would rather seem them address altogether if we are going to make a change

That makes sense.  `first` is easy to "fix", just need to define default values for `rank` in group_nth (though AFAICT we never call group_nth with anything _but_ those default values, so we may want to just hard-code it and make group_nth into group_first)

For `median` the tests pass if we  change `{"name": "group_median"}` to just `"group_median"`, but I expect its a dict for some reason (ideas @jreback?) > can we just add ngroups to the rank signatures and then this would just work?

That would work, yes Updated per comments.  group_rank gets a new unused parameter, and group_nth we're punting on for the time being thanks @jbrockmendel 