Как оптимизировать эту pandas итерацию - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующий метод, в котором я устраняю перекрывающиеся интервалы в кадре данных на основе набора иерархических правил:

Это работает нормально, за исключением того факта, что кадры данных, которые я повторяю иметь более 100 тыс. строк в каждой, так что это займет вечность. Я рассчитал время для различных методов, используя %prun в Jupyter, и метод, который, кажется, съедает время обработки, был series.py:3719(apply) ... NB: Я пытался использовать modin.pandas, но это вызывало больше проблем (я продолжал получать ошибка, связанная с Interval, где требуется значение, где left было меньше right, чего я не мог понять: я могу указать здесь проблему GitHub).

Ищу способ оптимизировать это, например, используя векторизацию, но, честно говоря, я не имею ни малейшего понятия, как преобразовать это в векторную форму.

Вот образец моих данных:

begin,end,note_id,score
0,9,0365,1
10,14,0365,1
25,37,0365,0.7
28,37,0365,1
38,42,0365,1
53,69,0365,0.7857142857142857
56,60,0365,1
56,69,0365,1
64,69,0365,1
83,86,0365,1
91,98,0365,0.8333333333333334
101,108,0365,1
101,127,0365,1
112,119,0365,1
112,127,0365,0.8571428571428571
120,127,0365,1
163,167,0365,1
196,203,0365,1
208,216,0365,1
208,223,0365,1
208,231,0365,1
208,240,0365,0.6896551724137931
217,223,0365,1
217,231,0365,1
224,231,0365,1
246,274,0365,0.7692307692307693
252,274,0365,1
263,274,0365,0.8888888888888888
296,316,0365,0.7222222222222222
301,307,0365,1
301,316,0365,1
301,330,0365,0.7307692307692307
301,336,0365,0.78125
308,316,0365,1
308,323,0365,1
308,330,0365,1
308,336,0365,1
317,323,0365,1
317,336,0365,1
324,330,0365,1
324,336,0365,1
361,418,0365,0.7368421052631579
370,404,0365,0.7111111111111111
370,418,0365,0.875
383,418,0365,0.8285714285714286
396,404,0365,1
396,418,0365,0.8095238095238095
405,418,0365,0.8333333333333334
432,453,0365,0.7647058823529411
438,453,0365,1
438,458,0365,0.7222222222222222

1 Ответ

0 голосов
/ 08 мая 2020

Думаю, я знаю, в чем была проблема: я неправильно отфильтровал note_id и, таким образом, перебирал весь фрейм данных.

Должно быть:

Для тестирования одной заметки, до того как я перестал повторять весь нефильтрованный фрейм данных, это заняло более 16 минут. Сейчас 28 секунд!

...