#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 это плохо, и это ожидаемо. Если у вас возникли проблемы с производительностью, рассмотрите возможность расширения ваших словарей. При правильном представлении данных эта операция может занять долю секунды.