создайте новый фрейм данных из объекта GroupBy в pandas

#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})