Вот решение, которое создает обычный DataFrame вместо серии dicts:
pd.DataFrame.from_records(df1.B).groupby(df1.A).sum()
Первый шаг преобразует вашу серию dicts в обычный DataFrame с одним столбцом на ключ. Тогда это простая группа и сумма, чтобы получить окончательный результат:
Word1 Word2 Word3 Word4 Word5
A
Cat1 18.0 7.0 11 2.0 0.0
Cat2 0.0 7.0 9 7.0 2.0
Сохранение ваших данных в таком формате будет намного более эффективным, чем серия dicts, если значения не очень разрежены (т.е. матрица является большой и в основном нулями).
Если вам нужен результат, чтобы быть серией dicts, это работает:
def add_dicts(s):
c = Counter()
s.apply(c.update)
return dict(c)
df1.groupby('A').B.agg(add_dicts)
Он производит именно ваш df_out
.