Как я могу создать несколько диаграмм p ie, используя matplotlib - PullRequest
3 голосов
/ 09 марта 2020

У меня есть Pandas DataFrame выглядит следующим образом

Year    EventCode   CityName    EventCount
2015    10          Jakarta     12
2015    10          Yogjakarta  15
2015    10          Padang      27
...
2015    13          Jayapura    34 
2015    14          Jakarta     24
2015    14          Yogjaarta   15
...
2019    14          Jayapura    12  

Я хочу визуализировать топ-5 городов с самым большим EventCount (с диаграммой p ie), сгруппированных по коду события в каждом году

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Этого можно достичь путем реструктуризации ваших данных с помощью pivot_table, фильтрации по основным городам с использованием sort_values и метода DataFrame.plot.pie с subplots параметр:

# Pivot your data
df_piv = df.pivot_table(index='EventCode', columns='CityName',
                        values='EventCount', aggfunc='sum', fill_value=0)


# Get top 5 cities by total EventCount
plot_cities = df_piv.sum().sort_values(ascending=False).head(5).index

# Plot
df_piv.reindex(columns=plot_cities).plot.pie(subplots=True,
                                             figsize=(10, 7),
                                             layout=(-1, 3))

[out]

enter image description here

2 голосов
/ 09 марта 2020

Pandas поддерживает автоматическое построение каждого столбца на участке. Итак, вы хотите выбрать CityName в качестве индекса, сделать EventCode в качестве столбца и графика.

(df.sort_values('EventCount', ascending=False) # sort descending by `EventCount`  
   .groupby('EventCode', as_index=False)
   .head(5)                                    # get 5 most count within `EventCode`
   .pivot(index='CityName',                    # pivot for plot.pie
          columns='EventCode',
          values='EventCount'
         )
   .plot.pie(subplots=True,                    # plot with some options
             figsize=(10,6), 
             layout=(2,3))
)

Выход:

enter image description here

...