在 xarray 中使用名称索引设置值
Set values using name index in xarray
我正在尝试使用 xarray 在 pandas 面板中进行的 MA 交叉。
我正在使用的数据:
<xarray.Dataset>
Dimensions: (DATE: 3355, DN_NAME: 22670)
Coordinates:
* DATE (DATE) datetime64[ns] 2004-05-18 2004-05-19 2004-05-21 ...
* DN_NAME (DN_NAME) object '17836' '1TIME' '4SIGHT' 'A-V-I' ...
Data variables:
Unnamed: 0 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
EXCHANGE (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
CODE (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
DNSECTOR (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
EXCHANGE_SECTOR (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
OPEN (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
HIGH (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
LOW (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
CLOSE (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
VOLUME (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
OI (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
DY (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
EY (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
VALUE (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
DEALS (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
BID (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
OFFER (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
CURRENCY (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
ISSUED_SHARES (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
FULL_NAME (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
MA1 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MA2 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MA3 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MACROSS int64 0
适用于 pandas 面板的代码:
share_data['MACROSS'] = 0
#share_data['MACROSS'][(share_data['MA1'] <= share_data['MA2']) &
(share_data['MA1'].shift(1) > share_data['MA2'].shift(1))] = -1
现在我在将面板转换为 xarray 后在 xarray 中尝试了以下操作:
ds['MACROSS'] = 0
ds['MACROSS'].sel(MA1 <= ds['MA2'], ds['MA1'].shift(1) >
ds['MA2'].shift(1)) = 1
由于出现以下错误,我似乎无法使用 sel 索引来设置值:
File "<ipython-input-50-af02cd233ed5>", line 17
ds['MACROSS'].sel(ds['MA1'] > ds['MA2'], ds['MA1'].shift(1) <=
ds['MA2'].shift(1)) = 1
^
SyntaxError: can't assign to function call
知道如何 select xarray 中的这个子集然后按预期设置值吗?
谢谢!
Xarray 文档中有一节关于 Assigning Values With Indexing 并专门提供了此警告:
Do not try to assign values when using any of the indexing methods isel or sel
相反,您需要使用 xarray 对象来进行索引。像这样:
date_inds = ...some subset of dates with DATE dimension...
name_inds = ...some subset of names with DN_NAME dimension...
ds['MACROSS'][date_inds, name_inds] = 1
我正在尝试使用 xarray 在 pandas 面板中进行的 MA 交叉。
我正在使用的数据:
<xarray.Dataset>
Dimensions: (DATE: 3355, DN_NAME: 22670)
Coordinates:
* DATE (DATE) datetime64[ns] 2004-05-18 2004-05-19 2004-05-21 ...
* DN_NAME (DN_NAME) object '17836' '1TIME' '4SIGHT' 'A-V-I' ...
Data variables:
Unnamed: 0 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
EXCHANGE (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
CODE (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
DNSECTOR (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
EXCHANGE_SECTOR (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
OPEN (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
HIGH (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
LOW (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
CLOSE (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
VOLUME (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
OI (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
DY (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
EY (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
VALUE (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
DEALS (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
BID (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
OFFER (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
CURRENCY (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
ISSUED_SHARES (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
FULL_NAME (DATE, DN_NAME) object nan nan nan nan nan nan nan nan ...
MA1 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MA2 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MA3 (DATE, DN_NAME) float64 nan nan nan nan nan nan nan nan ...
MACROSS int64 0
适用于 pandas 面板的代码:
share_data['MACROSS'] = 0
#share_data['MACROSS'][(share_data['MA1'] <= share_data['MA2']) &
(share_data['MA1'].shift(1) > share_data['MA2'].shift(1))] = -1
现在我在将面板转换为 xarray 后在 xarray 中尝试了以下操作:
ds['MACROSS'] = 0
ds['MACROSS'].sel(MA1 <= ds['MA2'], ds['MA1'].shift(1) >
ds['MA2'].shift(1)) = 1
由于出现以下错误,我似乎无法使用 sel 索引来设置值:
File "<ipython-input-50-af02cd233ed5>", line 17
ds['MACROSS'].sel(ds['MA1'] > ds['MA2'], ds['MA1'].shift(1) <=
ds['MA2'].shift(1)) = 1
^
SyntaxError: can't assign to function call
知道如何 select xarray 中的这个子集然后按预期设置值吗?
谢谢!
Xarray 文档中有一节关于 Assigning Values With Indexing 并专门提供了此警告:
Do not try to assign values when using any of the indexing methods isel or sel
相反,您需要使用 xarray 对象来进行索引。像这样:
date_inds = ...some subset of dates with DATE dimension...
name_inds = ...some subset of names with DN_NAME dimension...
ds['MACROSS'][date_inds, name_inds] = 1