Мне нужна помощь в ограничении groupby для возврата значений в определенном диапазоне и построении средних значений для каждого года на линейном графике. - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь вывести средние максимальные и минимальные значения за год между 2005-2014 гг. На линейный график.База данных, из которой я читаю, содержит 165085 строк с записанной температурой от многочисленных метеостанций

. Чтобы решить эту проблему, я преобразовал столбец «Дата» в формат отметки времени, а затем использовал функцию groupby для возврата значений данных, сгруппированных по столбцу элемента.(есть два элемента TMAX и TMIN), а затем вычерчивают эти два (TMAX и TMIN) на линейном графике.

Есть 2 проблемы: 1.) на линейном графике отображаются точки данных из каждой строки в кадре данных- Я думаю, что было бы более разумно показывать среднюю максимальную и минимальную температуру для каждого года 2.) Я хочу показать среднюю минимальную и максимальную температуры между 2005 и 2014 годами (моя диаграмма показывает минимальную и смешанную температуру между 2005 и 2015 годами)

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.read_csv('data/C2A2_data/BinnedCsvs_d400/fb441e62df2d58994928907a91895ec62c2c42e6cd075c2700843b89.csv') 
#converting dates into datetime format
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df.groupby('Element')['Data_Value'].plot.line(legend=True)
fig = plt.gcf()
fig.set_size_inches(18.5,10.5)
plt.show()

Это мой текущий вывод:

Образец таблицы:

    ID  Element Data_Value
Date            
2014-11-12  USW00094889 TMAX    22
2009-04-29  USC00208972 TMIN    56
2008-05-26  USC00200032 TMAX    278
2005-11-11  USC00205563 TMAX    139
2014-02-27  USC00200230 TMAX    -106
2010-10-01  USW00014833 TMAX    194
2010-06-29  USC00207308 TMIN    144
2005-10-04  USC00203712 TMAX    289
2007-12-14  USW00004848 TMIN    -16
2011-04-21  USC00200220 TMAX    72
2013-01-16  USC00205822 TMAX    11
2008-05-29  USC00205822 TMIN    28

1 Ответ

0 голосов
/ 13 марта 2019

Начиная с образца таблицы


>>> df = df.pivot(columns='Element', values='Data_Value')
>>> df.index = pd.to_datetime(df.index)
>>> df = df.resample('YS').mean()
>>> df

Element     TMAX    TMIN
Date        
2005-01-01  214.0   NaN
2006-01-01  NaN     NaN
2007-01-01  NaN     -16.0
2008-01-01  278.0   28.0
2009-01-01  NaN     56.0
2010-01-01  194.0   144.0
2011-01-01  72.0    NaN
2012-01-01  NaN     NaN
2013-01-01  11.0    NaN
2014-01-01  -42.0   NaN

Отсюда легко построить каждый столбец, используя df.plot()

>>> df.plot(marker='o', lw=0)

Выход Plot output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...