将 Pandas DataFrame 网格化为多维 Xarray 数据集?

Gridding Pandas DataFrame to Multi-Dimensional Xarray Dataset?

有没有办法在不使用循环的情况下将“行格式”数据集网格化为 xarray 数据集?

具体来说,我想要一个数组,如果未指定任何值,则 (lat, lon, time) 网格中的所有值均为 0。我知道 pandas (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_xarray.html) 中的 .to_xarray() 方法,但这不会生成所需坐标(纬度、经度、时间)的完整覆盖。下面的玩具示例:

import pandas as pd
import xarray as xr 

# row data to be gridded
data = {'lats':[0,0,2], 'lons':[1,2,0], 'times':[0,1,2], 'values':[20,50,30]}
df_rows = pd.DataFrame(data)
# desired coordinates to grid onto:
lat = [0,1,2]
lon = [0,1,2]
time= [0,1,2]
# general form of the desired output Dataset
df_grid = xr.Dataset(data_vars={'data':(('lon','lat','time'), df_rows)},
                     coords={'lat': lat,
                             'lon': lon,
                             'time':time})

方法 xr.Dataset.from_dataframe 可以:

import pandas as pd
import xarray as xr

# row data to be gridded
data = {"lat": [0, 0, 2], "lon": [1, 2, 0], "time": [0, 1, 2], "values": [20, 50, 30]}
df_rows = pd.DataFrame(data).set_index(["time", "lon", "lat"])

ds = xr.Dataset.from_dataframe(df_rows)

ds 是一个 xarray.Dataset,有三个 dimensions/coordinates 和一个变量 values,这是一个 3x3x2 数据块。

timelonlat 设置为 df_rows 中的索引是必不可少的,因为这些列将被理解为坐标。

请注意,对于未指定 values 的坐标元组,此方法将使用 nan 填充变量 values