Постройте многослойную гистограмму и диаграмму с несколькими столбцами из фрейма данных Pandas

#pandas #data-visualization

Вопрос:

У меня есть данные CSV, которые считываются в фрейм данных Pandas, такой как:

 import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("membership-applications.csv", delimiter=";")
df.sort_values(by=['year', 'quarter'], inplace=True, ascending=True)

quarter,year,type,status,total
Q1,2019,new,approved,10
Q1,2019,renewal,approved,30
Q2,2019,new,approved,10
Q2,2019,new,rejected,20
Q2,2019,renewal,0
Q3,2019,new,0
Q3,2019,renewal,0
Q4,2019,new,0
Q4,2019,renewal,0
Q1,2020,new,approved,10
Q1,2020,renewal,approved,50
 

Как я могу построить столбчатую диаграмму с разбивкой по кварталам, годам и итогу (например, сумма каждого «нового» или «обновления», включая все статусы)? Например,

                                    ------  
 ------                           |  10  |
|  10  |  ------                   ------ 
 ------  |  10  |                 |      |
|      |  ------                  |  50  |
|  30  | |  20  |                 |      |
|      | |      |                 |      |
 ------   ------                   ------ 
Q1 2019  Q2 2019  Q3 2019 Q4 2019 Q1 2020
 

Кроме того, на основе того же фрейма данных, как я могу построить диаграмму с несколькими столбцами, например, за 1 квартал 2019 года, первый столбец «новый» (всего 10) и «обновление» в качестве следующего бара?

Что-то выглядит так:

       -- 
     |  |
 --  |30| 
|10| |  |
 --   -- 
 Q1 2019
 

Заранее спасибо за вашу помощь!!

Ответ №1:

вы можете попробовать pivot_table изменить форму данных:

 fig = df.pivot_table(index = ['year','quarter'], columns = 'type', values = 'total', dropna=False , fill_value = 0).plot(kind ='bar', stacked = True)
 

выход:

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

Чтобы отобразить панель рядом, просто удалите параметр стека:

 fig = df.pivot_table(index = ['year','quarter'], columns = 'type', values = 'total', dropna=False , fill_value = 0).plot(kind ='bar')
plt.xticks(rotation = 30)
 

выход:

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

Комментарии:

1. Это именно то, что я ищу. Потрясающая работа! Мне жаль, что у меня пока недостаточно репутации, чтобы голосовать. Это мое «ДА»:). Большое спасибо!!

2. Без проблем… 😌

3. Просто заработал достаточно «репутации» и вернулся к голосованию 1 🙂