#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 🙂