'Categorical' from output of 'factorize' has different encoding
If I call `pd.Categorical` using the results of `pd.factorize`, sometimes the encodings produced by them will be different:
```python
import pandas as pd, numpy as np

df = pd.DataFrame({
    "col1" : ["S","C","S","S","Q"]    
})
df["col1"] = pd.Categorical(df["col1"])
encoded, factors = pd.factorize(df["col1"])
recoded = pd.Categorical(df["col1"], factors).codes
```
I would expect in this case  that all three objects (`encoded`, `recoded`, and the original) will have the same encoding, but these are the results:
```python
df.col1.cat.codes.values
```
```
>>> array([2, 0, 2, 2, 1], dtype=int8)
```
```python
encoded
```
```
>>> array([0, 1, 0, 0, 2])
```
```python
recoded
```
```
>>> array([2, 0, 2, 2, 1], dtype=int8)
```

The issue can be solved by using `pd.Categorical` with `factors.to_numpy()` instead, but I think it'd be very reasonable to assume that the output from `factorize` is the expected input to `Categorical`.