#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, поэтому вы можете применять к нему словарные операции в качестве словаря.