Pandas 遍历DataFrameGroupBy对象以创建带有每月子批次的年度图像
我有一个熊猫数据框,带有每小时风速和风向的日期时间索引。我的timeseries涵盖了31年,我需要制作每月风玫瑰的年度图像。这将转化为31幅图像,每个图像有12个子图 我已经想出了如何使用windrose软件包获得windrose。使用GroupBy,我可以每年和/或每月对数据进行分组 我尝试过按年和月进行分组,但不知道如何按年进行迭代以生成月度图Pandas 遍历DataFrameGroupBy对象以创建带有每月子批次的年度图像,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个熊猫数据框,带有每小时风速和风向的日期时间索引。我的timeseries涵盖了31年,我需要制作每月风玫瑰的年度图像。这将转化为31幅图像,每个图像有12个子图 我已经想出了如何使用windrose软件包获得windrose。使用GroupBy,我可以每年和/或每月对数据进行分组 我尝试过按年和月进行分组,但不知道如何按年进行迭代以生成月度图 grouped = data.groupby(by=[data.index.year, data.index.month]) 接下来,我尝试做一
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:filter函数返回了一个ndarray,但需要一个标量bool
因此,在这一点上,我希望能够首先迭代几年,然后迭代几个月(每年),最终创建带有每月子批次的年度图像。您的错误如下:
for year in years:
yearly = data.groupby([data.index.year == year])
yearly=data.groupby([data.index.year]
将按年份对数据进行分组。您需要每年重复不同的分组,如下所示:
for name, group in yearly:
....
文档可在此处找到:
对于每月分组,您可以执行以下操作:
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语句中使用了“date”而不是“x”,这也是它失败的原因)。您的错误如下:
for year in years:
yearly = data.groupby([data.index.year == year])
yearly=data.groupby([data.index.year]
将按年份对数据进行分组。您需要每年重复不同的分组,如下所示:
for name, group in yearly:
....
文档可在此处找到:
对于每月分组,您可以执行以下操作:
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语句中使用了“date”而不是“x”,这也是它失败的原因)。感谢您在我的lambda函数中捕获错误。但是当我运行
year=data.groupby([data.index.year,data.index.month]).filter(lambda x:x.index.year=2017)
I getSyntaxError:lambda不能包含赋值
将代码更改为.filter(lambda x:x.index.year==2017)
,我再次得到错误TypeError:filter函数返回了一个数组,但需要一个标量bool
我的错误,在filter语句中将其更改为lambda x:(x.index.year==2017).any()
感谢您捕获我的lambda函数中的错误。但是当我运行year=data.groupby([data.index.year,data.index.month]).filter(lambda x:x.index.year=2017)
我得到语法错误:lambda不能包含赋值
将代码更改为filter(lambda x:x.index.year==2017)
,我再次得到错误TypeError:filter函数返回了一个ndarray,但预期是一个标量bool
我的错误,在filter语句中将其更改为lambda x:(x.index.year==2017)。any()