Succint
df.join(df.messageLabels.str.join('|').str.get_dummies().astype(bool))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True
sklearn
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
dum = mlb.fit_transform(df.messageLabels)
df.join(pd.DataFrame(dum.astype(bool), df.index, mlb.classes_))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True
пережаренное
n = len(df)
i = np.arange(n)
l = [*map(len, df.messageLabels)]
j, u = pd.factorize(np.concatenate(df.messageLabels))
o = np.zeros((n, len(u)), bool)
o[i.repeat(l), j] = True
df.join(pd.DataFrame(o, df.index, u))
messageLabels Good Other Bad Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] False False True True
Возиться
И вдохновлять Энди
df.join(pd.DataFrame([dict.fromkeys(x, True) for x in df.messageLabels]).fillna(False))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True