Подведение итогов коллекций.Счетчик объектов с использованием `groupby` в pandas

#python #pandas #dataframe #pandas-groupby #python-collections

#python #pandas #фрейм данных #pandas-groupby #python-коллекции

Вопрос:

Я пытаюсь сгруппировать words_count столбец по обоим essay_Set и domain1_score и добавить счетчики, words_count чтобы добавить результаты счетчиков, как указано здесь:

 >>> c = Counter(a=3, b=1)
>>> d = Counter(a=1, b=2)
>>> c   d                       # add two counters together:  c[x]   d[x]
Counter({'a': 4, 'b': 3})
 

Я сгруппировал их с помощью этой команды:
words_freq_by_set = words_freq_by_set.groupby(by=["essay_set", "domain1_score"]) но не знаю, как передать функцию добавления счетчика, чтобы применить ее к words_count столбцу, который просто .
Вот мой фрейм данных:

введите описание изображения здесь

Ответ №1:

GroupBy.sum работает с объектами счетчика. Однако я должен упомянуть, что процесс выполняется попарно, поэтому это может быть не очень быстро. Давайте попробуем

 words_freq_by_set.groupby(by=["essay_set", "domain1_score"])['words_count'].sum()
 

 df = pd.DataFrame({
    'a': [1, 1, 2], 
    'b': [Counter([1, 2]), Counter([1, 3]), Counter([2, 3])]
})
df

   a             b
0  1  {1: 1, 2: 1}
1  1  {1: 1, 3: 1}
2  2  {2: 1, 3: 1}


df.groupby(by=['a'])['b'].sum()

a
1    {1: 2, 2: 1, 3: 1}
2          {2: 1, 3: 1}
Name: b, dtype: object
 

Комментарии:

1. Примерно 13 тысяч строк, заняло ~ 26 секунд. Большое вам спасибо! Это сработало.

2. @White159 это плохо, и это ожидаемо. Если у вас возникли проблемы с производительностью, рассмотрите возможность расширения ваших словарей. При правильном представлении данных эта операция может занять долю секунды.