Панды - построение столбчатой ​​диаграммы с накоплением

Я пытаюсь создать столбчатую диаграмму с накоплением, которая воспроизводит изображение, все мои данные отделены от этой электронной таблицы Excel.

введите описание изображения здесь

Я не могу понять, как сделать для него фрейм данных, как на картинке, и не могу понять, как сделать столбчатую диаграмму с накоплением. Все примеры, которые я размещаю, работают по-разному по сравнению с тем, что я пытаюсь создать.

Мой фрейм данных - это csv всех значений, суженных до следующего с фреймом данных pandas.

      Site Name    Abuse/NFF
0    NORTH ACTON       ABUSE
1    WASHINGTON         -
2    WASHINGTON        NFF
3    BELFAST            -
4    CROYDON            - 

Мне удалось подсчитать данные с итогами и получить индивидуальные подсчеты для каждого сайта, я просто не могу объединить их в виде графика.

Был бы очень признателен за сильное руководство.

Завершенный код, большое спасибо за помощь в завершении.

test5 = faultdf.groupby(['Site Name', 'Abuse/NFF'])['Site Name'].count().unstack('Abuse/NFF').fillna(0)

test5.plot(kind='bar', stacked=True)

person Kuzen    schedule 01.05.2014    source источник
comment
Примечание для читателей: если при попытке принятого ответа вы получаете KeyError, связанный с индексом, используйте заполненный код здесь, в вопросе.   -  person KobeJohn    schedule 21.12.2016


Ответы (4)


Вы получаете ошибки или просто не знаете, с чего начать?

%pylab inline
import pandas as pd
import matplotlib.pyplot as plt

df2 = df.groupby(['Name', 'Abuse/NFF'])['Name'].count().unstack('Abuse/NFF').fillna(0)
df2[['abuse','nff']].plot(kind='bar', stacked=True)

столбчатый график

person chucklukowski    schedule 02.05.2014
comment
Это создает этот i.imgur.com/hocPgWg.jpg, который не совсем правильный, мне нужно сложенная часть должна быть подсчетом столбца злоупотреблений / нфф для каждого сайта. Я не получаю ошибок, просто пытаюсь начать. Приветствую за ответ. - person Kuzen; 02.05.2014
comment
Я обновил свой ответ, включив в него часть ['Abuse / NFF'] после функции groupby. Добавление этого означает, что столбец «Злоупотребление» будет единственным агрегированным значением (учитываемым в этом примере). - person chucklukowski; 02.05.2014
comment
К сожалению, это не работает, это в основном тот же график, но без сложения, без ошибок, без легенды, без зеленого цвета. Он подсчитывает итоги, а не итоги значений в столбцах для каждого магазина, если это имеет смысл. - person Kuzen; 02.05.2014
comment
Еще одна попытка. Если вы хотите увидеть пробелы, измените начало последней строки на ... df2.plot ( - person chucklukowski; 02.05.2014
comment
Приветствую за еще одну вечеринку, но все равно без радости. Помещу код на свой вопрос выше, получая ошибку. KeyError: ['ABUSE' 'NFF' '-'] не в индексе Я внес изменения в код, чтобы он соответствовал моему фрейму данных, но, похоже, не могу заставить его работать, также я хочу - в результатах мне нужно изменить - на значит неисправен, просто не дошли руки до него. - person Kuzen; 02.05.2014
comment
После внесения правок первая строка кода представляла собой подходящий фрейм данных, большое спасибо за помощь. Добавлен последний код, чтобы спросить, нужен ли он кому-то еще. - person Kuzen; 03.05.2014

Это должно помочь

df.groupby(['NFF', 'ABUSE']).size().unstack().plot(kind='bar', stacked=True)
person Domino    schedule 05.07.2018

Возможно, вы можете использовать функцию кросс-таблицы pandas

test5 = pd.crosstab(index=faultdf['Site Name'], columns=faultdf[''Abuse/NFF''])

test5.plot(kind='bar', stacked=True)
person Rafael Jose Gonzlez de Gouveia    schedule 29.11.2018

Если вы хотите изменить размер графика, используйте arg figsize

df.groupby(['NFF', 'ABUSE']).size().unstack()
      .plot(kind='bar', stacked=True, figsize=(15, 5))
person kamran kausar    schedule 17.09.2019