Построение составной гистограммы после группировки данных по нескольким столбцам - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть фрейм данных Pandas, который имеет 2 столбца, например -

Vendor     Product    Category
VendorA    ProdABC       B
VendorA    ProdXYZ       C
VendorAB   ProdCDC       A
VendorAB   ProdDEF       A
VendorAB   ProdKLM       B
VendorF    ProdXYZ       D
VendorC    ProdBSE       C
VendorF    ProdFGH       D
VendorAB   ProdMNO       D
VendorA    ProdFGH       D
VendorV    ProdCDC       A
VendorF    ProdBSE       C

Мне нужно -

  1. Узнайте о 10 лучших продавцах, у которых наибольшее количество продуктови
  2. Создайте столбчатую диаграмму с накоплением (matplotlib), изображающую разбивку по категориям количества продуктов для этих 10 ведущих поставщиков, чтобы показать сравнение общих продуктов и категорий продуктов, продаваемых 10 лучшими поставщиками..

Как я могу это сделать?

1 Ответ

1 голос
/ 29 сентября 2019

Я буду использовать кадр данных, который вы указали в своем вопросе

Для первого задания используйте groupby.size

top10=df.groupby('Vendor').size().sort_values(ascending=False).head(10)
print(top10)



Vendor
VendorAB    3
VendorA     2
VendorF     1
dtype: int64

После создания группы по vendors из top10 (с использованием: DataFrame.isin ) и categories использование DataFrame.unstack для построения с DataFrame.plot :

top10_by_categories=df[df['Vendor'].isin(top10vendors)].groupby(['Vendor','Category']).count()['Product'].unstack()
categories=top10_by_categories.columns
top10_by_categories['total']=top10_by_categories.sum(axis=1)
top10_by_categories.sort_values(by='total',ascending=False,inplace=True)
print(top10_by_categories)
top10_by_categories[categories].plot(kind='bar',stacked=True)





Category    A    B    C    D  total
Vendor                             
VendorAB  2.0  1.0  NaN  NaN    3.0
VendorA   NaN  1.0  1.0  NaN    2.0
VendorF   NaN  NaN  NaN  1.0    1.0

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...