Выбор выборочного сбора и преобразования набора данных

toyo10 спросил: 28 марта 2018 в 01:41 в: python

У меня есть набор данных в .xlsx с сотнями тысяч строк:

slug    symbol  name    date    ranknow open    high    low close   volume  market  close_ratio spread
companyA    AAA companyA    28/04/2013  1   135,3   135,98  132,1   134,21  0   1500520000  0,5438  3,88
companyA    AAA companyA    29/04/2013  1   134,44  147,49  134 144,54  0   1491160000  0,7813  13,49
companyA    AAA companyA    30/04/2013  1   144 146,93  134,05  139 0   1597780000  0,3843  12,88
....
companyA    AAA companyA    17/04/2018  1   8071,66 8285,96 7881,72 7902,09 6900880000  1,3707E+11  0,0504  404,24
....
lancer  LA  Lancer  09/01/2018  731 0,347111    0,422736    0,345451    0,422736    3536710 0   1   0,08
lancer  LA  Lancer  10/01/2018  731 0,435794    0,512958    0,331123    0,487106    2586980 0   0,8578  0,18
lancer  LA  Lancer  11/01/2018  731 0,479738    0,499482    0,309485    0,331977    950410  0   0,1184  0,19
....
lancer  LA  Lancer  17/04/2018  731 0,027279    0,041106    0,02558 0,031017    9936    1927680 0,3502  0,02
....
yocomin YC  Yocomin 21/01/2016  732 0,008135    0,010833    0,002853    0,002876    63  139008  0,0029  0,01
yocomin YC  Yocomin 22/01/2016  732 0,002872    0,008174    0,001192    0,005737    69  49086   0,651   0,01
yocomin YC  Yocomin 23/01/2016  732 0,005737    0,005918    0,001357    0,00136     67  98050   0,0007  0
....
yocomin YC  Yocomin 17/04/2018  732 0,020425    0,021194    0,017635    0,01764 12862   2291610 0,0014  0
....

Скажем, у меня есть .txt файл со списком символов этого временного ряда, который я хочу извлечь. Например:

AAA
LA
YC

Я хотел бы получить набор данных, который будет выглядеть следующим образом:

date          AAA        LA        YC
28/04/2013    134,21     NaN       NaN
29/04/2013    144,54     NaN       NaN
30/04/2013    139        NaN       NaN
....
....
....
17/04/2018    7902,09    0,031017  0,01764

, где под названием запаса ( как AAA и т. д.), я получаю "близкую" цену. Я открыт как для Python, так и для R. Любая помощь будет решена!

1 ответ

Есть решение
Troy D ответил: 02 апреля 2018 в 05:12

В python, использующем pandas, это должно работать.

import pandas as pddf = pd.read_excel("/path/to/file/Book1.xlsx")
df = df.loc[:, ['symbol', 'name', 'date', 'close']]
df = df.set_index(['symbol', 'name', 'date'])
df = df.unstack(level=[0,1])
df = df['close']

, чтобы прочитать файл файла символов, а затем отфильтровать символы, отсутствующие в кадре данных:

symbols = pd.read_csv('/path/to/file/symbols.txt', sep=" ", header=None)
symbols = symbols[0].tolist()
symbols = pd.Index(symbols).unique()
symbols = symbols.intersection(df.columns.get_level_values(0))

И вывод будет выглядеть так:

print(df[symbols])symbol                   AAA        LA        YC
name                companyA    Lancer   Yocomin
date                                            
2018-09-01 00:00:00     None  0,422736      None
2018-10-01 00:00:00     None  0,487106      None
2018-11-01 00:00:00     None  0,331977      None
toyo10 ответил: 31 марта 2018 в 03:26
Большое спасибо за ответ. Тем не менее появляется ошибка: "ValueError: Индекс содержит повторяющиеся записи, не может изменить форму". Возможно, потому что мой файл .txt может содержать некоторые символы, которые на самом деле отсутствуют в столбце символов.
toyo10 ответил: 01 апреля 2018 в 08:34
Проблема в том, что в наборе данных (df в вашем примере) у нас нет уникальных "символов", поэтому df.unstack() завершается ошибкой. Иногда у нас есть 2 разных серии ААА для примеров. Может быть полезно будет приложить 2,3 и т. Д. в случае, если у нас есть дубликаты, чтобы избежать ValueError. Любая идея?
Troy D ответил: 01 апреля 2018 в 07:40
То есть вы говорите, что может быть несколько записей для одной даты и пары символов? Что если мы будем индексировать символ и имя? Создает ли это уникальный идентификатор столбца? Проверьте изменение ответа, чтобы увидеть, если это исправить.
toyo10 ответил: 02 апреля 2018 в 09:56
Спасибо большое, это работает !! Единственное, что я получаю KeyError в print(df[symbols]), потому что некоторые из моих данных в файле .txt отсутствуют в df['close'].
Troy D ответил: 02 апреля 2018 в 02:38
Обновлен ответ, чтобы отфильтровать символы, отсутствующие в кадре данных. Дайте мне знать, если это исправит это.