Ищите некоторые возможности для ускорения этого процесса. Я использую его для построения иерархии до 20 уровней. Поэтому я вызываю эту функцию в кадре данных и сообщаю ей, какие столбцы нужно просмотреть. Мой фрейм данных немного различается по длине, но обычно он имеет ширину 150 столбцов. Вызов этой функции 15 раз (чтобы «подняться в иерархию») для 30 тыс. Записей занимает около 45 минут (это очень медленно в первых нескольких столбцах, которые она просматривает). Я предполагаю использовать эту функцию для кадра данных длиной около 400 Кб, и я хочу ускорить этот процесс, если это возможно.
В двух словах, Мой Dataframe должен был уже собрать всех, кто необходим для построения иерархии, и затем я возвращаю уникальный список идентификаторов Supervisor ID. Затем эта функция помещает c в эти идентификаторы в указанном столбце (SupervisorColumnToReview) и определяет идентификатор, которому они сообщают, и помещает его в другой указанный столбец (ColumnToCreate). Тогда я просто вызываю это снова на вновь созданной колонке.
Заранее спасибо!
def LookUpSupervisor(SampleDataFrame,SupervisorColumnToReview,ColumnToCreate):
ColumnToReview = SupervisorColumnToReview
print(ColumnToReview)
SupervisorList=SampleDataFrame[ColumnToReview].unique().tolist()
for Supervisor in SupervisorList:
try:
SampleDataFrame.loc[(SampleDataFrame[ColumnToReview] == Supervisor),ColumnToCreate] = SampleDataFrame.loc[SampleDataFrame['Employee ID'] == Supervisor,'Supervisor ID'].iloc[0]
except:
SampleDataFrame.loc[(SampleDataFrame[ColumnToReview] == Supervisor),ColumnToCreate] = "Supervisor ID Not Found"
SampleDataFrame[ColumnToCreate] = SampleDataFrame[ColumnToCreate].astype(str)