Лучше, чем класс, предложенный другими, - передать объект, который может сделать то, что вы сделали бы с классом, например, создать новый экземпляр.
interface Factory<T> {
T apply();
}
<T> void List<T> make10(Factory<T> factory) {
List<T> result = new ArrayList<T>();
for (int a = 0; a < 10; a++)
result.add(factory.apply());
return result;
}
class FooFactory<T> implements Factory<Foo<T>> {
public Foo<T> apply() {
return new Foo<T>();
}
}
List<Foo<Integer>> foos = make10(new FooFactory<Integer>());
Вот решение, которое создает обычный 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
.