``ColumnTransformer`` not honoring passthrough on `transform` with pandas when passthroughs not present in `fit` data

### Describe the bug

Passthrough columns appear to be dropped after running transform on the ColumnTranformer when the fit data did not have the same passthroughs. From my reading of the docstring, they should be included with the output of `transform` as per the docstring:

>       By specifying ``remainder='passthrough'``, all remaining columns that
>       were not specified in `transformers` will be automatically passed
>       through. This subset of columns is concatenated with the output of
>       the transformers.

Ideally when `remainder='passthrough'`, I should be able to pass in _any_ dataframe to transform provided it has the required columns to transform and nothing should get dropped regardless of whether or not the passthroughs were present in the fit data.

If this is intentional to avoid unexpected columns during the transform, then I suggest making this clear in the docstring.

### Steps/Code to Reproduce

```python
import pandas as pd
import sklearn
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder

# Make a mixed-type dataset including passthrough columns
df = pd.DataFrame(
    {
        "a": ["a", "a", "b", "c", "d"],
        "b": [0.577569, 0.751900, 0.722548, 0.675158, 0.676203],
        "c": ["a", "b", "b", "a", "c"],
        "d": [0.62, 0.75, 0.72, 0.67, 0.67],
        "e": [180.86, 182.70, 184.41, 188.70, 179.82],
        # add extra columns for passthrough
        "passthrough_1": [1, 2, 3, 4, 5],
        "passthrough_2": [0, 1, 0, 0, 1],
    }
)

ct = ColumnTransformer(
    transformers=[
        ("ord", OrdinalEncoder(), ["b", "d", "e"]),
        (
            "cat",
            OneHotEncoder(sparse_output=False, handle_unknown="ignore"),
            ["a", "c"],
        ),
    ],
    remainder="passthrough",
)
df_without = df[[x for x in df.columns if "passthrough" not in x]]

ct.set_output(transform="pandas")
ct.fit(df_without)
df_output = ct.transform(df)
assert all(x in df_output.columns for x in ["remainder__passthrough_1", "remainder__passthrough_2"])
```


### Expected Results

Passthrough columns should be present in the output of `transform`.  The reproducer code should run without raising an AssertionError on my test case.

### Actual Results

The code fails the assert since `passthrough_1` and `passthrough_2` are not present in the output data and an `AssertionError` is raised.

### Versions

```shell
System:
    python: 3.9.13 (main, Aug 25 2022, 18:29:29)  [Clang 12.0.0 ]
executable: /path/to/.venv/bin/python
   machine: macOS-10.16-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.0
          pip: 22.3.1
   setuptools: 65.6.3
        numpy: 1.22.4
        scipy: 1.9.3
       Cython: None
       pandas: 1.5.2
   matplotlib: 3.6.3
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /path/to/.venv/lib/python3.9/site-packages/numpy/.dylibs/libopenblas64_.0.dylib
        version: 0.3.18
threading_layer: pthreads
   architecture: Haswell
    num_threads: 6

       user_api: openmp
   internal_api: openmp
         prefix: libomp
       filepath: /path/to/.venv/lib/python3.9/site-packages/sklearn/.dylibs/libomp.dylib
        version: None
    num_threads: 12

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /path/to/.venv/lib/python3.9/site-packages/scipy/.dylibs/libopenblas.0.dylib
        version: 0.3.18
threading_layer: pthreads
   architecture: Haswell
    num_threads: 6
```

COMMENT:
A little more context:

We have an ML pipeline where we fit a ColumnTransformer and use it for both the build and validation data, however, the validation data may have extra ancillary columns not relevant to the model build. 

Now as a workaround, we could just split the dataframe before validation, do the transform and then concat these passthrough columns back on later.

Labels: Documentation