我有一个带有时风速和方向的datetime索引的pandas DataFrame。我的时间序列涵盖31年,我需要每年制作每月风玫瑰的图像。这将转换为31个图像,每个图像具有12个子图。
我已经弄清楚了如何使用Windrose包来获取windrose。使用GroupBy,我可以按每年和/或每月对数据进行分组。
我曾尝试按年和月分组,但无法弄清楚如何逐年迭代以制作月度图
grouped = data.groupby(by=[data.index.year, data.index.month])
接下来,我尝试进行一个for循环并将每个组每年的数据分组
# Make lists of years and months
years = pd.Series(data.index.year).drop_duplicates(keep='first')
months = np.arange(1,13)
for year in years:
yearly = data.groupby([data.index.year == year])
但这仅将数据分组为2017年的观察值,而没有将其归为2017年的观察值。如果我随后尝试使用以下方法过滤到2017年:
for year in years:
yearly = data.groupby([data.index.year == year]).filter(lambda x: data.index.year == 2017)
我收到错误TypeError:过滤器函数返回了ndarray,但预期为标量布尔
因此,在这一点上,我希望能够首先迭代数年,然后迭代数月(每年)以最终创建具有每月子图的年度图像。
您的错误在这里:
for year in years:
yearly = data.groupby([data.index.year == year])
yearly = data.groupby([data.index.year]
将以年为单位对数据进行分组。您需要按年迭代不同的组,如下所示:
for name, group in yearly:
....
可以在以下位置找到文档:http : //pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#iterating-through-groups
对于每月分组,您可以执行以下操作:
yearly = data.groupby([data.index.year, data.index.month])
它将按年份分组,然后按月分组。
然后按月过滤,仅返回2017年:
yearly = data.groupby([data.index.year, data.index.month]).filter(lambda x: x.index.year = 2017)
(在您的代码中,您在lambda语句中使用了“日期”而不是“ x”,这也是为什么它也失败了)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句