повысить эффективность группового панды с помощью пользовательской функции агрегирования - PullRequest
0 голосов
/ 05 октября 2018

У меня не очень большой массив данных (где-то в диапазоне 2000x10000 с точки зрения формы).

Я пытаюсь groupby столбцы и усреднить первые N ненулевых записей:

например

def my_part_of_interest(v,N=42):
   valid=v[~np.isnan(v)]
   return np.mean(valid.values[0:N])

mydf.groupby('key').agg(my_part_of_interest)

Теперь это занимает много времени (дюжина минут), когда вместо .agg(np.nanmean) вместо нескольких секунд.

как заставить его работать быстрее

1 Ответ

0 голосов
/ 05 октября 2018

Некоторые моменты, которые следует учитывать:

  1. Удаление записей nan для всего df с помощью одной операции быстрее, чем для кусков сгруппированных наборов данных mydf.dropna(subset=['v'], inplace=True)
  2. Используйте.голова к нарезке mydf.groupby('key').apply(lambda x: x.head(42).agg('mean')

Я думаю, что все вместе может немного оптимизировать вещи, и они более идиоматичны для панд.

...