Я хотел бы удалить дублированную строку из этого xarray:
<xarray.QFDataArray (dates: 61, tickers: 4, fields: 6)>
array([[[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan]],
[[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ]],
...,
[[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan]],
[[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan]]])
Coordinates:
* tickers (tickers) object BloombergTicker:0000630D US Equity ... BloombergTicker:0000630D US Equity
* fields (fields) <U27 'PX_LAST' 'BEST_PEG_RATIO' ... 'VOLATILITY_360D'
* dates (dates) datetime64[ns] 1995-06-30 1995-07-30 ... 2000-06-30
В приведенном выше примере тикер дублируется 4 раза. Моя цель - получить вывод, который выглядит примерно так:
<xarray.QFDataArray (dates: 61, tickers: 1, fields: 6)>
array([[[ 4.9167, nan, ..., 2.1695, nan],
[ 5. , nan, ..., 2.1333, 70.02 ],
...,
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan]]])
Coordinates:
* tickers (tickers) object BloombergTicker:0000630D US Equity
* fields (fields) <U27 'PX_LAST' 'BEST_PEG_RATIO' ... 'VOLATILITY_360D'
* dates (dates) datetime64[ns] 1995-06-30 1995-07-30 ... 2000-06-30
Обратите внимание, что поле "тикеры" было уменьшено с 4 до 1.
Вот код (импорт библиотек не включен):
def _get_historical_data_cache():
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'cached_values_v2_clean.cache')
data = cached_value(_get_historical_data_bloomberg, path) # data importation from cache memory, if not available, directly from a data provider
return data
def _slice_by_ticker():
tickers = _get_historical_data_cache().indexes['tickers']
for k in tickers:
slice = _get_historical_data_cache().loc[:, k, :] # it gives me duplicated tickers.
От поставщика данных я получаю массив трехмерных данных (xarray) со следующим измерением: даты, тикеры и поля. Цель состоит в том, чтобы «нарезать» этот куб, план за планом, в моем случае, тикер за тикером, чтобы на каждой итерации получить массив данных 2D (или трехмерный массив, как показано выше в качестве желаемого результата), который будет представлять каждый тикер с соответствующими данными (даты и поля).
Вот как выглядит xarray на первой итерации (как показано выше). Проблема в том, что уникальный тикер дублируется:
In[2]: slice
Out[2]:
<xarray.QFDataArray (dates: 61, tickers: 4, fields: 6)>
array([[[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan],
[ 4.9167, nan, ..., 2.1695, nan]],
[[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ],
[ 5. , nan, ..., 2.1333, 70.02 ]],
...,
[[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan]],
[[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan],
[ nan, nan, ..., nan, nan]]])
Coordinates:
* tickers (tickers) object BloombergTicker:0000630D US Equity ... BloombergTicker:0000630D US Equity
* fields (fields) <U27 'PX_LAST' 'BEST_PEG_RATIO' ... 'VOLATILITY_360D'
* dates (dates) datetime64[ns] 1995-06-30 1995-07-30 ... 2000-06-30
Когда я пробую решение, предложенное Райаном, вот код:
def _slice_by_ticker():
tickers = _get_historical_data_cache().indexes['tickers']
for k in tickers:
slice = _get_historical_data_cache().loc[:, k, :] # it gives me duplicated tickers.
# get unique ticker values as numpy array
unique_tickers = np.unique(slice.tickers.values)
da_reindexed = slice.reindex(tickers=unique_tickers)
А вот и ошибка:
ValueError: cannot reindex or align along dimension 'tickers' because the index has duplicate values
Спасибо за вашу помощь! :)