Я пытаюсь оптимизировать или избежать pandas Метод Groupby.apply (), который берет мою пользовательскую функцию и применяет ее для каждого идентификатора
Версия Pandas: 0.23.4
Исходный кадр данных
ID Val1 Val2 Val3
1111 2 2 3
1111 NAN 9 10
1111 NAN 7 4
2222 NAN 2 3
2222 3 2 3
3333 6 NAN 5
3333 NAN 2 3
Я группирую на уровне идентификатора и вызываю функцию применения, которая управляет пользовательской функцией
df_dedup = df.groupby('ID').apply(lambda x : my_func(data = x))
Моя функция my_func удаляет дубликаты на уровне идентификатора, выбирая ту, которая имеет наибольшие пропущенные значения.
Если количество не пропущенных значений одинаково (например, ID 3333), тогда я выбираю случайным образом одно.
ID Val1 Val2 Val3
1111 2 2 3 (This will be picked, highest non-missing ID)
1111 NAN 9 10
1111 NAN 7 4
2222 NAN 2 3
2222 3 2 3 (This will be picked, highest non-missing ID)
3333 6 NAN 5
3333 NAN 2 3 (Random Pick)
apply () удобно объединяет все 3 идентификатора, и результирующий кадр данных равен
Final De-duped Dataframe
ID Val1 Val2 Val3
1111 2 2 3
2222 3 2 3
3333 NAN 2 3
Теперь, как мне это сделать без использования groupby.apply () или apply ()?Есть ли альтернатива?
Он работает вечно 1 миллион записей запущен за ~ 20 минут