Я использую векторизованный метод pr.as str.split () для извлечения первого элемента, возвращенного из разбиения на «~».Я также пытался использовать df.apply () с лямбдой и str.split () для получения эквивалентных результатов.При использовании% timeit я обнаружил, что df.apply () работает быстрее, чем векторизованная версия.
Все, что я читал о векторизации, похоже, указывает на то, что первая версия должна иметь лучшую производительность.Может кто-нибудь объяснить, почему я получаю эти результаты?Пример:
id facility
0 3466 abc~24353
1 4853 facility1~3.4.5.6
2 4582 53434_Facility~34432~cde
3 9972 facility2~FACILITY2~343
4 2356 Test~23 ~FAC1
Приведенный выше фрейм данных имеет около 500 000 строк, и я также протестировал около 1 миллиона с похожими результатами.Вот несколько примеров ввода и вывода:
Векторизация
In [1]: %timeit df['facility'] = df['facility'].str.split('~').str[0]
1.1 s ± 54.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Lambda Apply
In [2]: %timeit df['facility'] = df['facility'].astype(str).apply(lambda facility: facility.split('~')[0])
650 ms ± 52.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Кто-нибудь знает, почему у меня такое поведение?
Спасибо!