Как оптимизировать обработку моего фрейма данных? Максимумы и минимумы S&P - PullRequest
0 голосов
/ 14 июля 2020

Я хочу получать ежедневно, если цена акций находится на минимуме или максимуме за 52 недели, и для этого я написал этот фрагмент кода:

prices = yf.download(tickers, start=start, end=end)["Adj Close"]

max_min = pd.DataFrame(0, index=np.arange(len(prices)), columns=list(prices.columns))

for i in range(251, len(prices)):
    for j in range(prices.shape[1]):
        if prices.iloc[i, j] >= prices.iloc[:i].max()[j]:
            max_min.loc[i, prices.columns[j]] = 1
        elif prices.iloc[i, j] <= prices.iloc[:i].min()[j]:
            max_min.loc[i, prices.columns[j]] = -1

Где «тикеры» - это список со всеми тикеры S&P 500, дата начала - октябрь 2006 г., дата окончания - сегодня.

price.shape = (3451, 505)

Это занимает вечность, и мне нужно получить эти данные ежедневно. Как я могу оптимизировать свой код?

PD: Я запускал пример с этим кодом.

a = pd.DataFrame(np.random.randint(0,200, size=(10,10)), index=np.arange(10), columns=list("ABCDEFGHIJ"))

max_min = pd.DataFrame(0, index=np.arange(len(prices)), columns=list(prices.columns))

for i in range(4, len(a)):
for j in range(a.shape[1]):
    if a.iloc[i, j] >= a.iloc[:i].max()[j]:
        max_min.loc[i, a.columns[j]] = 1
    elif a.iloc[i, j] <= a.iloc[:i].min()[j]:
        max_min.loc[i, a.columns[j]] = -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...