#sql #pandas
#sql #pandas
Вопрос:
То, что я действительно хочу сделать, может быть выражено sql
следующим образом:
SELECT v1, v2, COUNT(*) AS v_count FROM my_table GROUP BY 1,2
это означает, что я хочу создать новый фрейм данных, который состоит из 3 столбцов: (v1, v2, v_count)
.
Вот что я пробовал с pandas
:
grp = df.groupby(['v1', 'v2']) # GROUP BY v1, v2
cnt = grp.count() # get v_count for each group
но как объединить их в новый фрейм данных?
Ответ №1:
Вы можете выбрать один из агрегированных столбцов для v_count
, а затем сбросить индекс, поскольку v1
и v2
находятся в индексе, например:
df.groupby(['v1', 'v2'])['v1'].agg({'v_count': np.size}).reset_index()
В качестве альтернативы вы можете использовать as_index
аргумент ключевого слова вместо использования reset_index
, например:
df.groupby(['v1', 'v2'], as_index=False)['v1'].agg({'v_count': np.size})