У меня есть следующий кадр данных, в котором около 4000 тикеров и всего около 2 миллионов строк:
Ticker Date Rank
1 01/01/2000 5
1 01/02/2000 NaN
2 01/01/2000 4
2 01/02/2000 2
Теперь я запускаю следующий код для переноса столбца Rank, который отлично работает:
import pandas as pd
df= df.sort_values(by=["Ticker", "Date"], ascending=[True,True])
df['Rank'] = df.groupby('Ticker')['Rank'].fillna(value=None, method="ffill")
Однако теперь я хочу перенести другой столбец. Чтобы создать этот столбец, я делаю следующее:
import numpy as np
df["Code"]=np.NaN
В этой функции я пишу некоторый код, который заменяет около 200 значений на 1 в соответствии с датой и значениями тикера в df «добавить». Этот код работает и выглядит следующим образом:
df["Code"][(df.Date == add) & (df["Ticker"] == column)] = 1
Это делает мой фреймворк данных таким:
Ticker Date Rank Code
1 01/01/2000 5 NaN
1 01/02/2000 NaN NaN
2 01/01/2000 4 1
2 01/02/2000 2 NaN
Теперь я хочу перенести этот столбец, но код занимает вечность.
import pandas as pd
df= df.sort_values(by=["Ticker", "Date"], ascending=[True,True])
df['Code'] = df.groupby('Ticker')['Code'].fillna(value=None, method="ffill")
Я запускал его два дня, и мой компьютер разбился. Здесь должна быть какая-то ошибка в том, как я это делаю, потому что вышеупомянутый перенос выполняется так быстро, а этот даже не заканчивается. Я проверил dtype «Код», и это float64.
Кто-нибудь может помочь?
sort=False
для повышения производительности. - person jezrael   schedule 27.06.2017