There are several operations that we currently disallow because they produce a variable set of columns in the output based on the data (non-deferred-columns). However, for some dtypes (categorical, boolean) we can easily enumerate all the possible values that will be seen at execution time, so we can predict the columns that will be seen.
Note we still can't implement these operations 100% correctly, as pandas will typically only create columns for the values that are observed, while we'd have to create a column for every possible value.
We should allow these operations in these special cases.
Operations in this category:
- DataFrame.unstack (can work if unstacked level is a categorical or boolean column)
- len(GroupBy) and ngroups
- if groupers are all categorical and observed=False or all boolean
- Note these two may not actually be equivalent in all cases: https://github.com/pandas-dev/pandas/issues/26326