Возможно, вы можете сделать это за один раз, но просто поднабор для двух групп и использование str.get_dummies
для каждого поднабора, а затем объединить результаты
import pandas as pd
pd.concat([a[a.succeeded].vals.str.get_dummies(sep=',').sum().to_frame('succeeded_t'),
a[~a.succeeded].vals.str.get_dummies(sep=',').sum().to_frame('succeeded_f')],
axis=1, sort=True).fillna(0)
Выход:
succeeded_t succeeded_f
a 1.0 1.0
b 1.0 2.0
c 2.0 0.0
d 0.0 1.0
С другой стороны
Если в выводе будет много столбцов, которые вы не хотите объединять вручную:
(a.set_index('succeeded')
.vals.str.get_dummies(sep=',')
.groupby(level=0).sum().T
.rename_axis(None, axis=1))
Выход:
False True
a 1 1
b 2 1
c 0 2
d 1 0