Pandas - сравнение среднего значения часовых периодов друг с другом для заданного диапазона дат - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь привыкнуть к использованию даты и времени в Pandas и построению различных сравнений для данного набора данных. Я использую на практике набор данных London Air Quality для Ozone и пытаюсь воспроизвести приведенную ниже таблицу (которую я создал с помощью сводной таблицы в Excel) с Pandas и matplotlib.

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

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

Я попытался преобразовать данные в многоиндексный формат и затем построить график, аналогично тому, что Я бы сделал в Excel перед заговором, но не уверен, что это правильный способ решения проблемы. Код для изменения формы ниже. Я все еще привыкаю к ​​изменению формы, поэтому не уверен, что это правильное использование / я правильно подхожу к проблеме и открыт для других методов для выполнения sh этой задачи. Любая помощь для выполнения sh этой задачи будет высоко ценится!

enter image description here

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

data = pd.read_csv('/Users/xx/Downloads/LaqnData.csv')

data['ReadingDateTime'] = pd.to_datetime(data['ReadingDateTime'])

data['Date'] = pd.to_datetime(data['ReadingDateTime']).dt.date
data['Time'] = pd.to_datetime(data['ReadingDateTime']).dt.time

data.set_index(['Date', 'Time'], inplace = True)

hourly_dataframe = data.pivot_table(columns = 'Site', values = 'Value', index = ['Date', 'Time'])

hourly_dataframe.fillna(method = 'ffill', inplace = True)
hourly_dataframe[hourly_dataframe < 0] = 0

1 Ответ

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

Я зашел на сайт и скачал 24-часовое чтение для следующего:

data.Site.unique()

массив (['BX1', 'TH4', 'BT4', 'HI0', 'BL0', 'RD0'], dtype = object)

Я принял ваш код к этому моменту:

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

data = pd.read_csv('/Users/xx/Downloads/LaqnData.csv')

data['ReadingDateTime'] = pd.to_datetime(data['ReadingDateTime'])

Затем я использую datetime index для вызова каждого часа в функции groupby.

data.groupby([data.index.hour, data['Site']])['Value'].mean().reset_index()`#Convert to dataframe.`

Чтобы построить график, я приковываю unstack к функции groupby и напрямую строю график.

data.groupby([data.index.hour, data['Site']])['Value'].mean().reset_index#unstack().plot()
plt.xlabel('Hour of the day')
plt.ylabel('Ozone')
plt.title('Avarage Hourly comparison')
plt.legend()`# If you want the legend to appear in default location`

enter image description here Если суетиться по поводу местоположения легенды, этот пост объясняет это очень хорошо. В вашем случае

plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15),
          fancybox=True, shadow=True, ncol=6)

enter image description here

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