У меня есть список кортежей с более чем 0,8 миллионами записей, пример которых показан ниже
[('r', 'b', '>', 'ins'),
('r', 'ba', '>', 'ins'),
('r', 'a', '>', 'del'),
('ar', 'b', '>', 'ins'),
('ar', 'ba', '>', 'del')]
Приведенный выше список преобразуется в Pandas фрейм данных, а затем в некоторую последующую группировку. и агрегатные операции над ним выполняются, как показано ниже
conDF = pd.DataFrame.from_records(tripleeList)
conDF.columns = ["lc","obj","rc","insOrDel"]
conDF["coun"] = 1
groupedConDF = conDF.groupby(["lc","rc","obj","insOrDel"]).count()
Замечено, что если последний элемент в каждом кортеже представлен с использованием целого числа (скажем, с 1 и 0) вместо использования строк "ins «и» del, то время обработки в 10 раз превышает то, что требуется в настоящее время. Я использовал %%time
magi c в блокноте jupyter для получения показателей.
Время, сообщаемое при использовании строк
CPU times: user 459 ms, sys: 24.4 ms, total: 484 ms
Wall time: 481 ms
Время, сообщаемое при использовании целых чисел
CPU times: user 5.77 s, sys: 410 ms, total: 6.18 s
Wall time: 604 ms
Обновлено
При изменении кода в соответствии с предложением @jezrael сообщается следующее
Строки:
CPU times: user 966 ms, sys: 45.9 ms, total: 1.01 s
Wall time: 431 ms
Целое число:
CPU times: user 5.72 s, sys: 375 ms, total: 6.09 s
Wall time: 558 ms
Модифицированный код:
conDF = pd.DataFrame.from_records(tripleeList)
conDF.columns = ["lc","obj","rc","insOrDel"]
conDF["coun"] = 1
groupedConDF = conDF.groupby(["lc","rc","obj","insOrDel"], sort=False).size()
Что может быть причиной этого?