Dask has docs on performing custom aggregations. They discuss the case of computing the mean, and how it's more complex than the pandas counterpart:
Many reductions can only be implemented with multiple temporaries. To implement these reductions, the steps should return tuples and expect multiple arguments. A mean function can be implemented as:
custom_mean = dd.Aggregation(
'custom_mean',
lambda s: (s.count(), s.sum()),
lambda count, sum: (count.sum(), sum.sum()),
lambda count, sum: sum / count,
)
df.groupby('g').agg(custom_mean)
This hints at the complexity involved in handling all types of user-defined aggregation, but provides a pretty good overview of how to implement them.
As for renaming the column, I don't see a way to do that in one step (at the moment). Could be wrong about this, and I'm sure this will probably change in the future. Complex reshape operations in dask are significantly different from their pandas counterparts because they need to work with data partitions and account for a variety of data locations, so it's not trivial to replicate the full pandas API. Balancing performance considerations on a laptop, a distributed cluster, and a high-performance computing facility (the range of dask deployments is quite broad) with the many feature requests from users is a real challenge for the dask developers.
Generally, the answer "why does this not exist" for open source projects is "if you want to contribute it, PRs are welcome!". See dask's development guidelines for a nice intro to contributing.