Я хотел бы знать, как я могу ускорить выполнение следующей функции, например. с Китоном?Pandas speedup apply on max()
def groupby_maxtarget(df, group, target):
df_grouped = df.groupby([group]).apply(lambda row: row[row[target]==row[target].max()])
return df_grouped
Эта функция группируется по одному столбцу и возвращает все строки, где цель каждой группы достигает своего максимального значения; возвращаемый результирующий фрейм.
Если у df есть, скажем, строки 500K, для выполнения этой функции на компьютере требуется около 5 минут. Эта производительность в порядке, но у меня есть данные с более чем 10 миллионами строк ... Конечно, одним из решений было бы выполнить вышеуказанное в качестве запроса на SQL-сервере и получить Python результат, но я надеялся на SQL- свободное, Pythonic решение.
Не совсем, способ преобразования реализован в основном в режиме вещания. Он вычисляет через cython. Таким образом, даже 100x групп всего в 2 раза медленнее. (IIRC мы сделали это в 0.15.0) – Jeff
Huh! Это значительно улучшилось из прошлого, что заставляет задуматься, не нужны ли какие-то хакеры на уровне нескольких уровней, которые я использовал для повышения производительности. (4s все еще кажется мне длинным, но относительно на порядок лучше, чем я думал.) – DSM
Кстати, улучшение в моем случае экспоненциально – Quetzalcoatl