Dies ist eine Folgefrage an this one, wo jezrael pandas.DataFrame.groupby verwendet, um die Geschwindigkeit einer Listenerstellung um einen Faktor von einigen hundert zu erhöhen. Insbesondere lassen df
eine große Datenrahmen ist, dannWarum ist groupby so schnell?
index = list(set(df.index))
list_df = [df.loc(x) for x in index]
und
list_df = [x for i,x in df.groupby(level=0, sort=False)]
das gleiche Ergebnis produzieren, wobei letztere mehr als 200-mal schneller als die ersteren, auch die Listenerstellung Schritt ignorieren. Warum?
Ich wäre sehr froh, wenn mich jemand verstehen könnte, warum es so einen gewaltigen Leistungsunterschied gibt. Danke im Voraus!
Bearbeiten: wie von Alex Riley in seinem Kommentar vorgeschlagen, bestätige ich, dass die Tests auf einem Datenrahmen mit nicht eindeutigen und nicht-monotonen Index ausgeführt wurden.
ich das glauben, wie viel interessanter als das ist der Grund. –
Es sieht so aus, als hätten Sie einen nicht eindeutigen Index, möglicherweise auch nicht monoton. In solchen degenerierten Fällen, glaube ich, muss Pandas bei jedem Aufruf von "loc" über den * gesamten * Index iterieren, um ein neues Array (mit der gleichen Länge wie der Index) für boolesche Indexierung zu erstellen. OTOH, 'groupby' durchsucht den Index nur einmal und verfolgt die ganzzahligen Positionen für jedes Etikett. Ich müsste alles in der Quelle überprüfen, um sicher zu gehen. –