首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xarray -将函数应用于DataArray的时间维度,并将结果作为变量添加

xarray -将函数应用于DataArray的时间维度,并将结果作为变量添加
EN

Stack Overflow用户
提问于 2021-03-31 08:29:49
回答 1查看 293关注 0票数 2

我有一个DataArray da,它有一个名为FFDI的变量,它有三个维度:timelatitudelongitude

代码语言:javascript
运行
复制
xarray.DataArray   'FFDI'   time: 43848   latitude: 2   longitude: 244

latitude     (latitude)     float32           -39.2 -39.163948
longitude    (longitude)    float32           140.8 140.83786 ... 149.96214 150.0
time         (time)         datetime64[ns]    2000-01-01T00:00:00  2000-01-01T01:00:00  ...  2004-12-31T22:00:00  2004-12-31T23:00:00

我想要实现的是将以下函数应用于time维度的每个时间戳,以计算时间戳是否在夏令时期间,并输出一个布尔值。

代码语言:javascript
运行
复制
def isDST(dt_str):
    local_time_tz = pytz.timezone("Australia/Victoria")
    naive_datetime = datetime.datetime.strptime (dt_str, "%Y-%m-%d %H:%M:%S")
    a = local_time_tz.localize(naive_datetime)
    return bool(a.dst())

输出将是一个数值数组或另一个DataArray元素;然后它将作为名为isDST的额外变量添加到原始da中。

代码语言:javascript
运行
复制
xarray.DataArray   'FFDI'   time: 43848   latitude: 2   longitude: 244

latitude     (latitude)     float32           -39.2 -39.163948
longitude    (longitude)    float32           140.8 140.83786 ... 149.96214 150.0
time         (time)         datetime64[ns]    2000-01-01T00:00:00  2000-01-01T01:00:00  ...  2004-12-31T22:00:00  2004-12-31T23:00:00
isDST        (time)         bool              true true ... true true

这是可能的吗?应该在xarray、pandas或numpy中使用什么函数?

EN

回答 1

Stack Overflow用户

发布于 2021-04-06 16:19:36

您只需使用简单的列表理解并将新坐标添加到DataArray

代码语言:javascript
运行
复制
import xarray as xr
import pytz

# example data
x = xr.tutorial.load_dataset("air_temperature").air

local_time_tz = pytz.timezone("Australia/Victoria")
is_dst = [bool(local_time_tz.localize(x).dst()) for x in x.time.to_index()]
x = x.assign_coords(is_dst=("time", is_dst))

# result
# Coordinates:
#   * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0
#   * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0
#   * time     (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00
#     is_dst   (time) bool True True True True True ... True True True True True

如果xxarray.Dataset而不是xarray.DataArray,您可以简单地这样做:

代码语言:javascript
运行
复制
x['is_dst'] = [bool(local_time_tz.localize(x).dst()) for x in x.time.to_index()]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66880083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档