Добавьте бары на график, чтобы показать средние значения после применения групповых панд - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть примерный фрейм данных:

test = pd.DataFrame({'cluster':['1','1','1','1','2','2','2','2','2','3','3','3'],
                 'type':['a','b','c','a','a','b','c','c','a','b','c','a']})

Затем я строю график% значений типа для каждого кластера, используя groupby:

pct_col = test.groupby(['cluster','type'])['type'].count()/(test.groupby('cluster').size())*100 # don't reset the index!
test = test.set_index(['cluster', 'type']) # make the same index here
test['count %'] = pct_col
test = test.reset_index() # to take the hierarchical index off again
sns.catplot(x="cluster", y="count %", hue="type", kind="bar", data=test)

enter image description here

Как добавить дополнительные три бара, показывающие среднее значение для каждого типа на основе всего набора данных -> test.groupby('type')['type'].count()/(len(test))*100

Буду признателен за вашу помощь!

1 Ответ

0 голосов
/ 23 ноября 2018

Использование crosstab

pd.crosstab(test.cluster,test.type,normalize='index',margins=True)
Out[305]: 
type            a         b         c
cluster                              
1        0.500000  0.250000  0.250000
2        0.400000  0.200000  0.400000
3        0.333333  0.333333  0.333333
All      0.416667  0.250000  0.333333

#pd.crosstab(test.cluster,test.type,normalize='index',margins=True).mul(100).stack()

Обновление Я думал, что сюжет прост с pandas

pd.crosstab(test.cluster,test.type,normalize='index',margins=True).plot(kind='bar')

enter image description here

...