У меня есть следующий код:
counter = 0
for assignid in tqdm(selectedTests['assignids'].unique()):
selectedTestsForAssignID = selectedTests[selectedTests['assignids']==assignid]
for memberid in selectedTestsForAssignID['memberid'].unique():
selectedTestsPivotCorrectTemp = selectedTestsForAssignID[selectedTestsForAssignID['memberid']==memberid].pivot_table(index=['memberid'],
columns=['col1', 'col2'],
values='col3', aggfunc=np.max)
if counter == 0:
selectedTestsPivotCorrect = selectedTestsPivotCorrectTemp
else:
selectedTestsPivotCorrect = pd.concat([selectedTestsPivotCorrect, selectedTestsPivotCorrectTemp], axis=0, join='outer')
counter = counter + 1
В приведенном выше коде я пытаюсь создать сводную таблицу для каждого memberid
и объединяю ее с главной сводной таблицей с именем selectedTestsPivotCorrect
. У меня в общей сложности 1000 assignids
, и каждый assignid
будет иметь в среднем 20-25 memberids
. Число столбцов после поворота для каждого memberid
должно составлять в среднем около 30.
Даже если этот код работает просто отлично, он работает довольно медленно. Бег занимает более 1,5 часов. У меня есть чувство, что это можно сделать гораздо более эффективным способом, но я не знаю, как.
Я также пытался создать сводную таблицу для каждого назначенного за один выстрел (не повторяя каждый memberid
), но это обычно дает мне ту или иную ошибку, которая при поиске в Google обнаружила, что она связана с проблемами с памятью.
Код начинает выполняться дольше после нескольких итераций на assignids
, так какглавная сводная таблица становится больше.
После всего этого я хотел бы создать сводную таблицу с индексом memberid
, столбцами ['col1','col2']
и значениями col3
.
Любые предложения по ускорению работы этого кода приветствуются.
TIA.