итерация в pandas.groupby

#python #pandas #pandas-groupby

#python #pandas #pandas-groupby

Вопрос:

У меня есть этот фрейм данных, который содержит три поля: «местоположение», «пол» и «категория».

Местоположение поля имеет значение от 1 до 1000. Поле sex имеет значение либо ‘m’, либо ‘f’, категория поля имеет значение от 1 до 600. Мне нужно количество элементов для каждого местоположения, каждого пола для списка значений категории, скажем [5,35,64,100, 216]

Я пробовал что-то вроде:

 result5=df.loc[(df.sex=='M')amp;(df.category==5)].groupby(['location','category'])count()
  

Я могу написать тот же код и для других требуемых значений в списке категорий.
Но это кажется очень повторяющимся

Я также пробовал что-то вроде:

 for i in [5,35,64,100, 216]:
    if i=5:
       result5=df.loc[(df.sex=='M')amp;(df.category==i)].groupby(['location','category'])count()
  

и т.д.
Это тоже кажется очень повторяющимся.

Не могли бы вы помочь мне с простым набором кодов, которые могут повторить процесс? большое спасибо!

Ответ №1:

Сначала фильтруйте данные по Series.isin , а затем агрегируйте по всем 3 столбцам с помощью GroupBy.size :

 L = [5,35,64,100, 216]
df1 = (df[df.location.isin(L)]
                .groupby(['location','sex','category'])
                .size()
                .reset_index(name='count'))
  

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

1. Спасибо @jezrael, но я получил формат данных как: местоположение, категория и количество в виде трех столбцов. Что мне действительно нужно, так это местоположение и каждая категория, например category5, category35, category64 и т. Д. В виде столбцов, а затем количество в каждой ячейке. можете ли вы научить меня, как это сделать, пожалуйста? Большое спасибо!