Извлечение индексов из многоуровневого DataFrame в виде строк в списке - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть многоуровневый DataFrame с 36 записями: Это pandas DF с 36 уровнями (36 акций) . Прилагается к одной дате времени. Для всех, кому интересно, это вывод, который создается с помощью API Zipline или Quantopians Pipeline API. Так что я не контролирую, как создается информационный фрейм.

Как вы видите в DF, каждый уровень представлен эквити или акцией, например: Equity(1251 [CAJ])

Я пытаюсь выяснить, как извлечь символ тикера для каждый уровень в строковом формате и добавить их в список! Например, list = ['CAJ', 'CBT', 'GILD', ...], за которым следуют все другие акции, которые выплевывает программа.

Это вызвало у меня сильную головную боль, и я попытался продолжить:
result = df asset_list = result.index.levels[1] stocks = asset_list.get_level_values(0).unique()

Но это кажется, не работает, и я получаю что-то далеко, это может быть проблема с API, поскольку len(stocks) обеспечивает значение 8830. Я даже не знаю, как это возможно.

Буду очень признателен за помощь в написании кода. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация с моей стороны.

Как упоминалось в ветке ниже, благодаря @sammywemmy, вот словарь первых 5 строк таблицы выше.

result.head().to_dict()

воспроизводит:

{'current ratio': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 1.921883,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 2.0836239999999999,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 3.1044160000000001,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 5.3676060000000003,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 1.5076229999999999},
 'dividend yield': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 7.4899999999999993,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 5.3900000000000006,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 3.29,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 4.0599999999999996,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 3.04},
 'interest coverage': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 227.99559500000001,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 4.5714290000000002,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 8.8230450000000005,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 9.5895290000000006,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 3.1692089999999999},
 'marketcap': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 21652842873.0,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 1471969134.0,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 98467576445.0,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 9171245233.0,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 4308534238.0},
 'payout ratio': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 138.62,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 63.009999999999998,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 59.719999999999999,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 65.930000000000007,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 55.530000000000001},
 'pe_ratio': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 18.307486999999998,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 11.858447,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 18.533175,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 16.528395,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 18.540130000000001},
 'price': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): 19.949999999999999,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): 25.969999999999999,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): 78.210000000000008,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): 67.060000000000002,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): 85.480000000000004},
 'sector': {(Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1251 [CAJ])): True,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(1315 [CBT])): True,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3212 [GILD])): True,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3460 [HAS])): True,
  (Timestamp('2020-04-06 00:00:00+0000', tz='UTC', offset='C'),
   Equity(3798 [IDA])): True}}

1 Ответ

0 голосов
/ 08 апреля 2020

Используйте regular expression с str.extract

# I'm not sure of the column name, but it appears to be
# the second column if you reset the index
df.reset_index().iloc[:, 1].str.extract(r'\[([A-Z_]+)\]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...