"根据维度坐标列过滤和排序xarray.Dataset"

2024-04-26 04:59:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把熊猫面板换成xarray.数据集在

我有一个数据集创建的字典和数据帧。每个数据帧包含一只股票的数据。数据帧行是交易日期,列是价格和指标。样本代码:

import pandas as pd
import xarray as xr

panel_dict = {}
panel_dict['AAPL'] = pd.DataFrame({'Open': [100, 105], 'Close': [104, 108],
                               'SMA200':[102, 110], 'RSI2': [11 , 14]},
                               index=['2017-09-01', '2017-09-02'])
panel_dict['AMZN'] = pd.DataFrame({'Open': [200, 180], 'Close': [190, 170],
                               'SMA200':[190, 190], 'RSI2': [11 , 15]},
                               index=['2017-09-01', '2017-09-02'])
panel_dict['AGN'] = pd.DataFrame({'Open': [300, 310], 'Close': [300, 310],
                               'SMA200':[250, 250], 'RSI2': [5 , 15]},
                               index=['2017-09-01', '2017-09-02'])

ds_full = xr.Dataset(panel_dict)

print(ds_full)

# selecting one day works
ds = ds_full.sel(dim_0 = '2017-09-02')
print(ds)

# filtering does not work
c = ds[ds['Close']>ds['SMA200']]
c = c[c['RSI2'] < 12.0 ]
c = c.sort_values(by = 'RSI2', ascending=True)

数据集ds_full看起来像:

^{pr2}$

选择ds=ds的1天数据_完整.sel(dim_0='2017-09-02')效果不错:

<xarray.Dataset>
Dimensions:  (dim_1: 4)
Coordinates:
    dim_0    <U10 '2017-09-02'
    * dim_1    (dim_1) object 'Close' 'Open' 'RSI2' 'SMA200'
Data variables:
     AAPL     (dim_1) int64 108 105 14 110
     AMZN     (dim_1) int64 170 180 15 190
     AGN      (dim_1) int64 310 310 15 250

但如何过滤某些附加条件,如“Close”>;“SMA200”或“RSI2”<;12?如何按“RSI2”列对结果排序?在

在原始代码中使用pandas.panel是这样的:

c = ds[ds['Close']>ds['SMA200']]
c = c[c['RSI2'] < 12.0 ]
c = c.sort_values(by = 'RSI2', ascending=True)

Tags: 数据dataframecloseindexdsopendictfull