Как отфильтровать акции в большом наборе данных - python - PullRequest
0 голосов
/ 13 мая 2019

У меня большой набор данных из более чем 20 000 акций за 1964-2018 гг. (Это данные CRSP, которые я получил от моего университета). Теперь я хочу применить следующую технику фильтрации согласно Amihud (2002): 1. включить все акции, цена которых превышает 5 долларов США на конец года t-1 2. включить все запасы, которые имеют данные как минимум за 200 дней на конец года t-1 3. акции имеют информацию о рыночной капитализации на конец года t-1

Я застрял в этом, поскольку никогда не работал с таким большим набором данных. Любые предложения, где я могу найти идеи, как решить эту проблему? Большое спасибо.

Я уже пытался фильтровать ежемесячно. Я создал новый фрейм данных, включающий те акции, цены на которые были выше 5 долларов в декабре. Теперь я застрял. На графике показано количество акций с течением времени до и после применения первого фильтра. кадр с фильтром

Количество акций с течением времени

df['month'] = pd.DatetimeIndex(df.index).month
df2= df[(df.month == 12) & (df.prc >= 5)]

EDIT:

Я создал образец кадра данных, который выглядит как мой исходный кадр данных

import pandas as pd
import numpy as np
df1 = pd.DataFrame( { 'date': ['2010-05-12', '2010-05-13', '2010-05-13', 
               '2011-11-13', '2011-11-14', '2011-03-30', '2011-12-01', 
               '2011-12-02', '2011-12-01', '2011-12-02'],
               "stock" : ["stock_1", "stock_1", "stock_2", "stock_3", 
               "stock_3", "stock_3", 'stock_1', 'stock_1', 'stock_2', 
               'stock_2'] , 
               "price" : [100, 102, 300, 51, 49, 45, 101, 104, 301, 299],
               'volume':[1000, 1020, np.nan, 510, 490, 450, 1010, 1040, 
               np.nan, 2990],
              'return':[0.01, 0.03, 0.02, np.nan, 0.02, -0.04, -0.08, 
               -0.01, np.nan, -0.01] } )

df1 = df1.set_index(pd.DatetimeIndex(df1['date']))
pivot_df = df1.pivot_table(index=[df1.index, 'stock'], values=['price', 
'vol', 'ret'])

Результирующий кадр данных - это в основном данные панели. Я хочу проверить, есть ли у каждой акции доходность и объемные данные (не NaN) каждый день. Затем я хочу удалить все акции, которые имеют данные о доходности и объеме менее чем за 200 дней в данном году. Поскольку исходный фрейм данных содержит почти 20 000 акций с 1964 по 2018 годы, я хочу сделать это эффективным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...