сумма значений, сгруппированных по другому столбцу pandas df

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Мне нужно подсчитать вхождение каждого значения в столбец name и сгруппировать по столбцу industry . Цель состоит в том, чтобы получить сумму каждого имени по отрасли. Мои данные выглядят следующим образом:

 industry            name
Home             Mike
Home             Mike,Angela,Elliot
Fashion          Angela,Elliot
Fashion          Angela,Elliot
  

Желаемый результат:

 Home Mike:2 Angela:1 Elliot:1
Fashion Angela:2 Elliot:2
  

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

1. df['name'] = df['name'].str.split(','); df.explode('name').groupby(['industry', 'name'], as_index=False).count()

2. @Marat почему бы не опубликовать это в качестве ответа?

3. @sushanth это слишком тривиально (как вопрос, так и ответ). Кроме того, я не хотел полностью отлаживать его, теперь это скорее направление для рассмотрения

4. @Marat Я согласен с вами, но в целом хороший ответ.

Ответ №1:

Убрал это из комментариев, отлажено и доказано, что работает:

 # count() in the next line won't work without an extra column
df['name_list'] = df['name'].str.split(',')
df.explode('name_list').groupby(['industry', 'name_list']).count()
  

Результат:

                     name
industry name_list      
Fashion  Angela        2
         Elliot        2
Home     Angela        1
         Elliot        1
         Mike          2
  

Ответ №2:

Вы можете использовать collections.Counter для возврата серии словарей следующим образом:

 from collections import Counter
s = df.name.str.split(',').groupby(df.industry).sum().agg(Counter)

Out[506]:
industry
Fashion               {'Angela': 2, 'Elliot': 2}
Home       {'Mike': 2, 'Angela': 1, 'Elliot': 1}
Name: name, dtype: object
  

Примечание: каждая ячейка является Counter объектом. Counter является подклассом dictionary, поэтому вы можете применять к нему словарные операции в качестве словаря.