Добавить значения словаря для общих ключей на основе категориальных переменных в другом столбце

Лучше, чем класс, предложенный другими, - передать объект, который может сделать то, что вы сделали бы с классом, например, создать новый экземпляр.

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>());
0
задан erm0rden 14 July 2018 в 01:19
поделиться

1 ответ

Вот решение, которое создает обычный 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.

0
ответ дан John Zwinck 17 August 2018 в 12:03
поделиться
  • 1
    Огромное спасибо. К сожалению, текстовые манипуляции, которые я пытаюсь сделать, - это 3000+ строк, и каждый словарь содержит более 500 различных пар ключ: значение. Есть ли что-нибудь еще, что вы бы порекомендовали в этом случае? – erm0rden 14 July 2018 в 01:47
  • 2
    @ erm0rden: Я предлагаю попробовать оба решения, которые я написал здесь (возможно, вы еще не видели второй, потому что я добавил его позже), и посмотрите, какой из них лучше работает. Мне было бы интересно узнать, какое решение вы выберете. – John Zwinck 14 July 2018 в 01:50
  • 3
    Вторые решения работают отлично! Мне нужно сохранить словарь без изменений для дальнейших операций. Спасибо большое :) – erm0rden 14 July 2018 в 02:04
Другие вопросы по тегам:

Похожие вопросы: