PERF: unstack
- [ ] closes #xxxx
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [ ] whatsnew entry

Avoids expensive get_indexer calls.

```
from asv_bench.benchmarks.reshape import *

self = Unstack()
self.setup("category")

%timeit self.time_full_product("category")
58.8 ms ± 1.52 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)  # <- master
31.6 ms ± 1.98 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)  # <- PR
```
does this allow us to get rid of some cython code (that i wrote a long time ago) to do unstacking? > does this allow us to get rid of some cython code (that i wrote a long time ago) to do unstacking?

no Yes, just fewer times

On Wed, Aug 18, 2021 at 8:20 AM Jeff Reback ***@***.***>
wrote:

> ***@***.**** requested changes on this pull request.
> ------------------------------
>
> In pandas/core/reshape/reshape.py
> <https://github.com/pandas-dev/pandas/pull/43025#discussion_r691343014>:
>
> > @@ -287,7 +287,7 @@ def get_new_values(self, values, fill_value=None):
>
>          return new_values, new_mask
>
> -    def get_new_columns(self, value_columns):
> +    def get_new_columns(self, value_columns: Index | None):
>
> is this still called?
>
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/pandas-dev/pandas/pull/43025#pullrequestreview-733035402>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AB5UM6E6WA7525MXYRE3WV3T5PFVRANCNFSM5CEFXWSQ>
> .
> Triage notifications on the go with GitHub Mobile for iOS
> <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
> or Android
> <https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email>
> .
>
