Я использую функцию Pandas pivot_table
для большого набора данных (10 миллионов строк, 6 столбцов). Поскольку время выполнения имеет первостепенное значение, я пытаюсь ускорить процесс. В настоящее время обработка всего набора данных занимает около 8 секунд, что значительно замедляет работу, и я надеюсь найти альтернативы для повышения скорости / производительности.
Моя текущая Панда pivot_table:
df_pivot = df_original.pivot_table(index="industry", columns = "months",
values = ["orders", "client_name"],
aggfunc ={"orders": np.sum, "client_name": pd.Series.nunique})
df_original
включает в себя все данные (10-метровые строки, импортированные из CSV). Отрасль - это отрасль клиента, месяцы - это месяцы заказов (с января по декабрь), количество заказов - это количество заказов. Все данные были преобразованы в данные categorical
, кроме количества заказов (тип данных int
). Первоначально отрасль, месяцы и client_name были строками.
Я пытался использовать pandas.DataFrame.unstack
- что было еще медленнее. Также я экспериментировал с Dask
. dask pivot_table
дал некоторое улучшение (время выполнения 6 секунд - так на 2 секунды меньше). Тем не менее, это все еще довольно медленно.
Есть ли более быстрые альтернативы (для больших наборов данных)? Возможно воссоздание сводной таблицы с groupy
, crosstab
, ... К сожалению, я не получил альтернативы для работы вообще, и я все еще довольно плохо знаком с Python и Pandas ...
Ждем ваших предложений. Заранее спасибо!
Обновление:
Я выяснил групповой путь с помощью:
df_new = df_original.groupby(["months", "industry"]).agg({"orders": np.sum, "client_name": pd.Series.nunique}).unstack(level="months").fillna(0)
Теперь это намного быстрее, примерно через 2-3 секунды. Есть ли еще варианты для улучшения скорости?