Итерации по годам для построения различных групповых значений в виде гистограммы в pandas - PullRequest
0 голосов
/ 23 января 2020

У меня есть фрейм данных, в котором записано количество наблюдений в разных местах за разные годы. Я пытаюсь составить таблицу, где я могу показать общее количество наблюдений в разных местах за разные годы. Для каждого местоположения я хочу, чтобы общее количество наблюдений за разные годы отображалось разными цветами. Мой подход заключается в том, чтобы сначала создать группы местоположений, а для каждой группы местоположений рассчитать общее количество наблюдений. (Я не думаю, что мне нужно менять индекс на дату - так как я группирую по местоположению). Я не могу добиться этого с помощью следующего кода. Помощь будет высоко ценится.

fig, ax = plt.subplots(figsize=(40,15))
date=df['date']
value=df['value']
df.date = pd.to_datetime(df.date)


year_start=2015
year_stop = 2019
#ax=plt.gca()

for year in range(year_start, year_stop+1):
    ax=plt.gca()
    m=df.groupby(['location']).agg({'value': ['count']})


    plt.ylim(0,45000)
    m.plot(kind='bar', legend = False, figsize=(30,15), fontsize = 30)
    #ax.tick_params(axis='both', which='major', labelsize=25)
    plt.ylabel('Number of observations - O3', fontsize = 30, fontweight = 'bold')    

    plt.legend(loc='upper right', prop={'size': 7})
    fig_title='Diurnal_'+place
    plt.savefig(fig_title, format='png',dpi=500, bbox_inches="tight")

    print ('saved=', fig_title)
    plt.show()


The header looks like this:
                             date_utc                       date parameter  \
    212580  {utc=2020-01-05T05:45:00.000Z  2020-01-05T11:15:00+05:30        o3   
    212581  {utc=2020-01-05T05:45:00.000Z  2020-01-05T11:15:00+05:30        o3   
    212582  {utc=2020-01-05T05:45:00.000Z  2020-01-05T11:15:00+05:30        o3   
    212583  {utc=2020-01-05T05:45:00.000Z  2020-01-05T11:15:00+05:30        o3   
    212584  {utc=2020-01-05T05:45:00.000Z  2020-01-05T11:15:00+05:30        o3   

                                               location  value   unit       city  \
    212580        ICRISAT Patancheru, Mumbai - TSPCB   37.7  µg/m³  Hyderabad   
    212581  Bollaram Industrial Area, Surat - TSPCB   39.5  µg/m³  Hyderabad   
    212582          IDA Pashamylaram, Surat - TSPCB   17.8  µg/m³  Hyderabad   
    212583               Sanathnagar, Hyderabad - TSPCB   56.6  µg/m³  Hyderabad   
    212584                  Zoo Park, Hyderabad - TSPCB   24.5  µg/m³  Hyderabad   

1 Ответ

0 голосов
/ 23 января 2020

Поскольку я не смог полностью воспроизвести ваш пример, я реализовал игрушечный пример из того, что понял. Пожалуйста, скажите мне, если я понял что-то не так. Вот мой код:

import seaborn as sns
import numpy as np
import pandas as pd


df = pd.DataFrame([['Mumbai',2017,10],['Mumbai',2017,12],['Mumbai',2018,20],['Mumbai',2018,23],['Abu Dhabi',2017,30],['Abu Dhabi', 2018,25]], columns =['Place','Year','Amount'])

df_grouped = df.groupby(['Place','Year']).agg({'Amount':'count'}).reset_index()

sns.barplot(x='Place',y='Amount',hue='Year',data= df_grouped)

Этот код покажет столбчатую диаграмму, где каждое местоположение будет находиться на оси X, а их общее количество будет на оси Y. Более того, каждый уникальный год получит свой бар на барплощадке. Как это:

enter image description here

...