Jest to kolejne pytanie do this one, gdzie jezrael użył pandas.DataFrame.groupby, aby zwiększyć o współczynnik kilkuset szybkość tworzenia listy. Szczególnie, pozwala df
być duża dataframe, następnieDlaczego groupby jest tak szybki?
index = list(set(df.index))
list_df = [df.loc(x) for x in index]
i
list_df = [x for i,x in df.groupby(level=0, sort=False)]
ten sam wynik, przy czym ten ostatni jest ponad 200 razy szybciej niż poprzednio, nawet pomijając etap tworzenia list. Czemu?
Byłbym bardzo zadowolony, gdyby ktoś mógł pozwolić mi zrozumieć, dlaczego istnieje tak ogromna różnica w wydajności. Z góry dziękuję!
Edytuj:, jak zasugerował Alex Riley w swoim komentarzu, potwierdzam, że testy zostały przeprowadzone na ramce danych z nieunikalnym i niemonotonicznym indeksem.
Uważam, że jak jest bardziej interesująca niż dlaczego. –
Wygląda na to, że masz nieunikalny indeks, być może również niemonotoniczny. W takich zdegenerowanych przypadkach, przy każdym wywołaniu 'loc', wierzę, że pandy muszą iterować nad * całym * indeksem, aby zbudować nową tablicę (o tej samej długości co indeks), która posłuży do indeksowania boolowskiego. OTOH, 'groupby' po prostu przeszukuje indeks i śledzi liczby całkowite dla każdej etykiety. Musiałbym dokładnie sprawdzić wszystko w źródle, żeby się upewnić. –