Pandas Groupby: подсчет и среднее значение
Работа с PANDAS, чтобы попытаться суммировать dataframe как количество определенных категорий, а также показатель оценки настроений для этих категорий.
Существует таблица, заполненная строками, которые имеют разные оценки настроений, и я хочу сгруппировать каждый текстовый источник, указав, сколько сообщений у них есть, а также среднее настроение этих сообщений.
Мой (упрощенный) dataframe выглядит так:
source text sent
--------------------------------
bar some string 0.13
foo alt string -0.8
bar another str 0.7
foo some text -0.2
foo more text -0.5
Результат этого должен быть примерно таким:
source count mean_sent
-----------------------------
foo 3 -0.5
bar 2 0.415
Ответ находится где-то рядом:
df['sent'].groupby(df['source']).mean()
Но только дает каждый источник, и это означает, без заголовков столбцов.
Заранее спасибо!
Ответы
Ответ 1
Вы можете использовать groupby
с aggregate
:
df = df.groupby('source') \
.agg({'text':'size', 'sent':'mean'}) \
.rename(columns={'text':'count','sent':'mean_sent'}) \
.reset_index()
print (df)
source count mean_sent
0 bar 2 0.415
1 foo 3 -0.500
Ответ 2
В новых версиях Panda вам больше не нужно переименовывать, если используются именованные параметры:
df = df.groupby('source') \
.agg(count=('text', 'size'), mean_sent=('sent', 'mean')) \
.reset_index()
print (df)
source count mean_sent
0 bar 2 0.415
1 foo 3 -0.500
Ответ 3
Я думаю, что это должно обеспечить вывод, который вы хотели:
result = pd.DataFrame(df.groupby('source').size())
results['mean_score'] = df.groupby('source').sent.mean()