category-encoders ≥2.11.1 adds MultiHotEncoder (delimiter multi-label cells → binary columns) and CountTargetEncoder (smoothed log-odds target encoding). Fit supervised encoders inside CV folds. Not a data-validation Top5 retread. Not investment advice.
scikit-learn-contrib category-encoders shipped a tabular feature-engineering bump: v2.11.0 (7 Sep 2026) then v2.11.1 (8 Sep 2026). Pin ≥2.11.1. This note covers two new encoders you can drop into a sklearn Pipeline tonight: MultiHotEncoder and CountTargetEncoder. It is not a data-validation Top5 retread (pandera / GX / Pydantic), and not investment advice.
The only course CTA is Introduction to Python Programming.
From the CHANGELOG and docs:
MultiHotEncoder — unsupervised. Cells like 'mathematics|physics' split on a configurable delimiter (default |); each distinct item seen at fit becomes one binary column. handle_unknown / handle_missing mirror the library’s usual options. No inverse_transform (multi-hot rows are not unique).
CountTargetEncoder — supervised, classification only for now. Stores per-class category counts and emits smoothing-adjusted log-odds vs the global prior (min_samples_leaf, smoothing). Binary → one WOE-style column; multiclass → one column per class. Unseen categories default to zero evidence (handle_unknown='value').
v2.11.1 fix: NestedCVWrapper.fit_transform now returns out-of-fold rows in the input’s original order—critical when a shuffling splitter would otherwise misalign encodings with y for positional consumers.
Also in 2.11.0 (skim, not tonight’s homework): composite_cols on supervised encoders, generalized min_group_size lumping, callable/int handle_unknown/handle_missing, RankHotEncoder handle_missing='ignore'.
Fit supervised encoders inside CV folds (or use NestedCVWrapper carefully). Fitting CountTargetEncoder on the full train+val frame before a split leaks target information into features. MultiHot is unsupervised, but still fit only on the training fold if your pipeline assumes a fixed column set.
python -c "import category_encoders as ce; import importlib.metadata as m; print(m.version('category-encoders'))"
# pip install -U "category-encoders>=2.11.1"
1. MultiHot on delimiter cells:
import pandas as pd
from category_encoders import MultiHotEncoder
X = pd.DataFrame({"tags": ["python|sql", "sql|ml", "python"]})
enc = MultiHotEncoder(cols=["tags"], delimiter="|", use_cat_names=True)
print(enc.fit_transform(X))
2. CountTargetEncoder on a tiny binary frame (toy only—use CV in real work):
import pandas as pd
from category_encoders import CountTargetEncoder
X = pd.DataFrame({"city": ["chicago", "chicago", "denver", "denver", "denver"]})
y = [1, 0, 1, 1, 0]
enc = CountTargetEncoder(cols=["city"]).fit(X, y)
print(enc.transform(X))
3. Confirm ≥2.11.1 so NestedCV row order is fixed before you trust fold wrappers.
Upgrade to category-encoders>=2.11.1, wire MultiHot or CountTarget into one sklearn pipeline step, and keep supervised fits inside folds. If package installs still fight you, Introduction to Python Programming.