Получение процента для каждого столбца после группового - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть пандас с двумя столбцами A и B. Столбец B содержит три категории X, Y, 'Z'. Мне нужно проверить, сколько процентов является конкретным значением для каждой группы в A. Вот как выглядит фрейм данных:

  A   B
  AA  X 
  BB  Y
  CC  Z
  AA  Y
  AA  Y
  BB  Z 
  ..  ..

Теперь я хочу построить составной график, но это должен быть процентный составной график, а не просто счет, основанный на каждой категории в B, соответствующей группе в A. Вот что я сделал до сих пор:

df.groupby(['A'])['B'].value_counts().unstack(), который дает мне это

B   X    Y      Z
A           
AA  65   666    5
BB  123  475    6
CC  267  1337   40

Теперь я хочу разделить каждый столбец на сумму соответствующей ему строки, как для первой строки (65/(65+666+5), 666/(65+666+5), 5/(65+666+5),), и отобразить результаты в виде столбчатой ​​диаграммы. Может кто-нибудь помочь, пожалуйста?

1 Ответ

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

Вы можете найти построчную сумму и поделить вдоль оси что-то вроде этого:

freq_df = df.groupby(['A'])['B'].value_counts().unstack()
pct_df = freq_df.divide(freq_df.sum(axis=1), axis=0)

А затем наметить, что вы должны просто иметь возможность использовать

pct_df.plot(kind="bar", stacked=True)
...