sklearn.preprocessing.MultiLabelBinarizer
from sklearn.preprocessing import MultiLabelBinarizer
o, l = zip(*[[o, [*filter(pd.notna, l)]] for o, *l in zip(*map(df.get, df))])
mlb = MultiLabelBinarizer()
d = mlb.fit_transform(l)
pd.DataFrame(d, o, mlb.classes_)
Cat Dog Ferret Hamster Mouse Rat
Bob 0 1 0 0 0 0
John 1 0 0 0 1 0
Lee 1 1 0 0 0 0
Jane 0 0 1 1 0 1
Тот же самый ответ
o = df.Owner
l = [[x for x in l if pd.notna(x)] for l in df.filter(like='Label').values]
mlb = MultiLabelBinarizer()
d = mlb.fit_transform(l)
pd.DataFrame(d, o, mlb.classes_)
Cat Dog Ferret Hamster Mouse Rat
Owner
Bob 0 1 0 0 0 0
John 1 0 0 0 1 0
Lee 1 1 0 0 0 0
Jane 0 0 1 1 0 1