使用Xarray获取每个时间步长极值对应的经纬度坐标
获取Xarray数据集每个时间步变量极值对应的经纬度坐标
方法1:直接用idxmax/idxmin获取首个极值坐标
Xarray的idxmax()和idxmin()方法可直接返回指定维度上极值对应的坐标标签,无需手动处理索引,是最简便的实现方式。
假设数据集目标变量名为temp,示例代码如下:
import xarray as xr # 获取每个时间步最大值对应的lat、lon坐标 max_coords = ds['temp'].idxmax(dim=['lat', 'lon']) # 转换为DataFrame便于查看结果 max_coords_df = max_coords.to_dataframe() # 获取每个时间步最小值对应的lat、lon坐标 min_coords = ds['temp'].idxmin(dim=['lat', 'lon']) min_coords_df = min_coords.to_dataframe()
max_coords是包含lat和lon变量的Dataset,维度为time,直接对应每个时间点极值的经纬度实际值。
方法2:同时获取极值数值与对应坐标
如果需要同时保留极值的数值和坐标,可合并计算结果:
# 计算每个时间步的最大值并重命名 max_vals = ds['temp'].max(dim=['lat', 'lon']).rename('max_temp') # 合并最大值数值与对应坐标 max_results = xr.merge([max_vals, max_coords]) # 最小值同理 min_vals = ds['temp'].min(dim=['lat', 'lon']).rename('min_temp') min_results = xr.merge([min_vals, min_coords])
方法3:获取所有极值点(存在多个相同极值时)
若某个时间步存在多个经纬度点的变量值同为极值,idxmax/idxmin仅会返回第一个出现的点。要获取所有极值点,可使用where进行筛选:
# 获取每个时间步的最大值 max_vals = ds['temp'].max(dim=['lat', 'lon']) # 筛选出所有等于最大值的点,丢弃非极值点 all_max_points = ds['temp'].where(ds['temp'] == max_vals, drop=True) # 转换为DataFrame查看所有极值坐标 all_max_points_df = all_max_points.to_dataframe().dropna().reset_index() # 最小值同理 min_vals = ds['temp'].min(dim=['lat', 'lon']) all_min_points = ds['temp'].where(ds['temp'] == min_vals, drop=True) all_min_points_df = all_min_points.to_dataframe().dropna().reset_index()
内容的提问来源于stack exchange,提问作者Henrique
相关产品推荐
相关产品推荐

