Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 遍历DataFrameGroupBy对象以创建带有每月子批次的年度图像_Pandas_Pandas Groupby - Fatal编程技术网

Pandas 遍历DataFrameGroupBy对象以创建带有每月子批次的年度图像

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]) 接下来,我尝试做一

我有一个熊猫数据框,带有每小时风速和风向的日期时间索引。我的timeseries涵盖了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: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 get
SyntaxError: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()