熊猫-比较给定日期范围内小时平均值的平均值

时间:2020-03-05 20:51:48

标签: python-3.x pandas datetime matplotlib

我试图习惯在Pandas中使用日期时间数据,并为给定的数据集绘制不同的比较。我正在使用London Air Quality数据集进行臭氧练习,并尝试使用Pandas和matplotlib复制下面的图表(我使用Excel中的数据透视表创建的图表)。

该图表绘制了整个数据集中每个位置每小时平均的臭氧读数,以查看是否有一个位置始终比其他位置更高,或者在一天的不同时段内不同位置的臭氧水平最高。 / p>

本质上,我希望绘制每个位置的每小时臭氧平均值。

我试图将数据重塑为多索引格式,然后进行绘图,这与我在绘图之前在excel中所做的类似,但是不确定这是否是解决问题的正确方法。重塑代码如下。我仍然习惯于重塑形状,因此不确定这是否是正确的用法/我是否以正确的方式解决问题,并愿意接受其他方法来完成此任务。对于完成这项任务的任何协助将不胜感激!

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 个答案:

答案 0 :(得分:1)

我去了网站并下载了以下内容的24小时阅读内容:

data.Site.unique()

array(['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 如果对图例位置感到迷惑,则此post可以很好地解释它。就您而言;

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

enter image description here