У меня есть фрейм данных с интересующей переменной (категориальный, здесь Yes
, No
и т. Д.) И группирующей переменной (см. Ниже):
import pandas as pd
import numpy as np
df = pd.DataFrame({
'ID': range(100),
'group': np.random.choice(['A', 'B', 'C'], 100),
'Response':np.random.choice(['Yes','No','Other', np.nan], 100)})
Из этого я бынравится извлекать и отображать накопленные данные по группам на гистограмме.
Подробно: для группы A
, процент Yes
, No
и т. д., то же самое для группы по.Команда df['Response'].groupby(df['group']).value_counts()
уже дает мне такой вывод:
group Response
A Other 14
No 8
Yes 8
nan 8
B Other 11
nan 11
No 5
Yes 4
C No 9
Yes 9
nan 7
Other 6
Name: Response, dtype: int64
Это то, что я хочу, но я не могу найти способ построить его соответствующим образом (в matplotlib или seaborn) и не уверен, что этопроблема преобразования или визуализации данных.
Этот вопрос задает о чем-то похожем, но я не могу заставить его работать с unstack
:
df = df['group'].unstack(0, fill_value = 0)
AttributeError: у объекта 'RangeIndex' нет атрибута 'remove_unused_levels'
и
df = df['group'].unstack(0, fill_value = 0)
df.index.name = None
df.columns.name = None
df.plot.bar(stacked=True)
только графики ID
(без группировки).