Thanks for another great show. I look forward to your next one.

As to your use of `pd.apply` in lieu of `np.select`, here's my 2 cents:

Apply is more readable in most cases, but select is more performant. When performance matters, or when the dataset is very large, you might want to use `np.select`. For instance, when using `np.select` on your example here, the output was 10x faster on my PC.

```
%timeit df.apply(Scorelevel, axis=1)

448 &micro;s &plusmn; 2.88 &micro;s per loop (mean &plusmn; std. dev. of 7 runs, 1000 loops each)
```

```
%timeit np.select(cond_list, choice_list, default='Require Activation')

55.6 &micro;s &plusmn; 440 ns per loop (mean &plusmn; std. dev. of 7 runs, 10000 loops each)
```

In many cases, the readability can trump the need for speed, but just wanted to give a counter-point.