Ускорение построчного цикла с условием if в Python - PullRequest
0 голосов
/ 12 мая 2018

У меня есть набор данных из 6 миллионов строк, столбцы: symbol, timeStamp, open price и close price. Я запускаю следующий цикл, который занимает очень много времени, хотя и очень прост (если open price равно nan, возьмите close price из предыдущего ряда):

for i in range(0,len(price2)):
    print(i)
    if np.isnan(price3.iloc[i,2]):
        price3.iloc[i,2]=price3.iloc[i-1,3]

Как я могу ускорить этот цикл? Насколько я знаю, я могу изменить на apply(), но как я могу включить в него условие if?

1 Ответ

0 голосов
/ 12 мая 2018

Вместо цикла for вы можете использовать pandas.Series.fillna со смещенной серией для цены закрытия.

price3['open price'].fillna(price3['close price'].shift(1), inplace=True)

Это векторизовано и должно быть намного быстрее, чем ваш цикл for.

Примечание. Я предполагаю, что price2 и price3 имеют одинаковую длину, и вы можете итерировать по price3 в своем цикле.

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