Python xarray:按多个参数分组

问题描述 投票:0回答:4

当使用 Python 2.7 的 xarray 包时,是否可以像 pandas 那样对多个参数进行分组?本质上,像这样的操作:

data.groupby(['time.year','time.month']).mean()

如果您想获取数据集每年和月份的平均值。

python python-xarray
4个回答
5
投票

不幸的是,xarray 尚不支持使用多个参数进行分组。这是我们想要支持的事情,而且相对简单,但还没人有时间实现它(欢迎贡献!)。


0
投票

该功能的工作仍在进行中,但我已经找到了解决方法。您可以使用

assign_coords
创建一个新坐标,准确地表示您的分组维度,并将
groupby
与该坐标一起使用。

例如,如果您想按小时和分钟分组,则可以有效地按一天中的分钟进行分组:

ds = ds.assign_coords(
    {
        "year": ds["time.year"],
        "month": ds["time.month"],
        "day": ds["time.day"],
        "minute_of_day": 60 * ds["time.hour"] + ds["time.minute"],
    }
)

ds = ds.groupby("minute_of_day").mean()

0
投票

自 2024 年起的解决方法,因为 xarray 仍不支持它:

import pandas as pd
import xarray as xr

# Extract values o resample
year = ds.time.dt.year.values
month = ds.time.dt.month.values
day = ds.time.dt.day.values
hour = ds.time.dt.hour.values

# Create a multi-index with year, month, day, and hour
multi_index = pd.MultiIndex.from_arrays(
    [year, month, day, hour],
    names=['year', 'month', 'day', 'hour']
)
# Convert the multi-index to a DataArray
multi_index_da = xr.DataArray(multi_index, dims=['time'], coords={'time': ds.time})

# Group by the multi-index DataArray and sum the values
hourly_sum = ds.groupby(multi_index_da).sum(dim='time')

index = pd.DataFrame(index=radar.ds.time.to_series()).resample('1H').sum()

hourly_sum['group'] = pd.to_datetime([f"{year}-{month}-{day} {hour}:00:00" for year, month, day, hour in hourly_sum.group.values])

hourly_sum = hourly_sum.rename({'group': 'time'})

-1
投票

一个简单的方法是构造一个多重索引并按“新”坐标进行分组:

da_multiindex = da.stack(my_multiindex=['time.year','time.month'])

da_mean = da.groupby("my_multiindex").mean()

da_mean.unstack()  # go back to normal index
© www.soinside.com 2019 - 2024. All rights reserved.