Supponiamo che df
sia un dataframe pandas
. Voglio dividerlo in due dataframes secondo alcuni criteri. Il modo migliore che ho trovato per fare questo è qualcosa di simile aCome dividere un dataframe in base a un criterio booleano?
df0, df1 = [v for _, v in df.groupby(df['class'] != 'special')]
Nell'esempio precedente, il criterio è l'argomento al metodo groupby
. Il df0
risultante è costituito dal sub-dataframe in cui il campo class
ha il valore'special'
e df1
è fondamentalmente il complemento di df0
. (Purtroppo, con questo costrutto, il sub-dataframe costituito dagli elementi che sicuro criterio vengono restituiti primo, che non è intuitivo.)
che questo costrutto presenta l'inconveniente di non essere particolarmente leggibile, non certo più leggibili, per esempio, un ipotetico splitby
metodo come
df0, df1 = df.splitby(df['class'] == 'special')
Poiché la suddivisione di un dataframe come questo è qualcosa che ho spesso bisogno di fare, immagino che ci possa essere una funzione built-in, o forse un idioma stabilita per averlo fatto Se è così, per favore fatemelo sapere.
potrei fare 'd = dict (list (df.groupby (df ["class"]! = "b"))) 'e quindi usa' d [0] '/' d [False] 'e' d [1] '/' d [True] 'invece. – DSM
@DSM In effetti, groupby è probabilmente un modo ancora migliore per archiviarlo (!) –
@AndyHayden: cosa intendi? Sarebbe bello se si potesse semplicemente indirizzare il contenuto di groupby con le sue (pseudo) chiavi, ma non funziona; cioè 'df.groupby (df.class! = 'b') [Vero]' genera un errore ... Non so come fare questo genere di cose senza convertire l'oggetto groupby in un dett ... – kjo