Как рассчитать медианные значения для года по 29-летнему набору данных по часам? - PullRequest
1 голос
/ 26 января 2020

Из долгосрочного набора данных на почасовой основе я хочу, чтобы средние значения приходились на каждый час 1 репрезентативного года. Например: Медианное значение первого часа с 1 января для репрезентативного года рассчитывается с 1 января каждого года в наборе данных. Набор данных доступен здесь: https://github.com/sugarello/sugarello/blob/master/dfsolarbwdlz.csv

После попыток roll () и groupby () я в итоге создал новые фреймы данных, определив критерии для индекса. До сих пор я пытался:

import numpy as np
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt




dfsolar = pd.read_csv('dfsolarbwdlz.csv', delimiter=';')
dfsolar['MESS_DATUM'] = pd.to_datetime(dfsolar['MESS_DATUM'], format='%Y%m%d%H')
dfsolar.set_index('MESS_DATUM')
dfsolar.index = dfsolar['MESS_DATUM']
dfsolarr = dfsolar.drop(columns=["MESS_DATUM"])

Определяя критерии для месяца, дня и часа, я частично получаю данные, которые ищу. Это не практично, потому что я должен повторить это 8760 раз. Например, только для 13-го часа 1-го января:

dfsolarWI00 = dfsolarr[((dfsolarr.index.month == 1) & (dfsolarr.index.day == 1) & (dfsolarr.index.hour == 13))]

Вывод моей последней попытки выглядит следующим образом: здесь

Я предполагаю одно решение в sort_index ()/Сортировать(). Однако я не смог настроить адекватный алгоритм поиска. Я на правильном пути? Что такое элегантное решение моей проблемы?

1 Ответ

0 голосов
/ 12 февраля 2020

После более глубокого изучения условий группового метода я изменил порядок следующим образом:

dfsolarrtest = dfsolarr.groupby([dfsolarr.index.month, dfsolarr.index.day, dfsolarr.index.hour]).median()

 dfsolarrtest.plot(figsize=(80,40))

и создал следующий график: enter image description here

Если я не ошибаюсь, я нашел свое решение, изменив порядок групповых условий на основе изменяющихся частей даты моего данного формата. Однако: я сгенерировал набор данных, состоящий из 8784 строк, который определенно не равен 8760 часам. Кроме того, одиночные медианные значения по:

median_example = dfsolarr[((dfsolar.index.month == 1) & (dfsolarr.index.hour == 16))]

median_example.median()

не равны точно той же дате из вычисленного набора данных с groupby. Любая помощь?

...