Я предварительно обрабатываю большой массив данных для анализа.По сути, я пытаюсь найти наибольшее число или значение, близкое к наибольшему (в столбце «больше» определено больше, чем 0.9*largest number
), и пометить его как 1
, а остальные позиции оставить как 0
, т.е. еслистолбец содержит [25, 3, 5, 24, 0]
он должен быть преобразован в [1,0,0,1,0]
.Каким-то образом код, который я написал, работает вечно.
Я написал простое понимание списка для очистки данных столбец за столбцом.Код запустился менее чем за 1 секунду для первых 2000 столбцов.Однако это стало очень медленным и заняло больше получаса, когда я увеличил количество столбцов до 10000.В конце концов я хочу запустить этот код в наборе данных с 5 миллионами строк, есть ли что-то неправильное, что я должен изменить, чтобы сделать его более эффективным?
tic = time.time()
for col in temp_dataset_1.iloc[:,:10000]:
temp_dataset_1[col] = [1 if i >= i.max()*.9 else 0 for i in temp_dataset_1[col]]
toc = time.time() - tic
print('Calculating 10,000 out of 5,810,172 rows took %d seconds' %toc)
#temp_dataset_1.iloc[:,:10000].head(n=5)
Мои знания о структуре данных ограничены, есть что-тоочевидно, что я пропускаю?