我有一个熊猫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,但预期为标量布尔值
因此,在这一点上,我希望能够首先迭代数年,然后迭代数月(每年),最终创建具有每月子图的年度图像。
答案 0 :(得分:0)
您的错误在这里:
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”,这也是为什么它也失败了。)