2015-10-27 16 views
11

Devo creare una funzione che divida il dataframe diviso in blocchi della dimensione necessaria. Ad esempio se dataframe contiene 1111 righe, voglio essere in grado di specificare una dimensione del blocco di 400 righe e ottenere tre dataframe più piccoli con dimensioni di 400, 400 e 311. Esiste una funzione di convenienza per eseguire il lavoro? Quale sarebbe il modo migliore per archiviare e iterare su dataframe affettato?Split dataframe in blocchi relativamente pari in base alla lunghezza

Esempio dataframe

import numpy as np 
import pandas as pd 

test = pd.concat([pd.Series(np.random.rand(1111)), pd.Series(np.random.rand(1111))], axis = 1) 
+0

Si può solo ottenere l'indice varia utilizzando 'test.index [:: 400]' e usare questo per affettare il df: 'prima = test.iloc [: 400] secondo = test.iloc [400: 800] third = test.iloc [800] ' – EdChum

+0

Ho più di 50 file con> 50k righe, penso che dovrò generare indice aggiuntivo in un ciclo e usare df.groupby() – YKY

+1

Puoi guardare [' sklearn train_test_split'] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_tpl_split.html) anche – EdChum

risposta

31

È possibile utilizzare .groupby come di seguito.

for g, df in test.groupby(np.arange(len(test)) // 400): 
    print(df.shape) 
# (400, 2) 
# (400, 2) 
# (311, 2) 
+1

Ho già scritto una funzione che ha fatto esattamente la stessa cosa. Ma è grande e brutto. Questa è una soluzione brillante ed elegante. Grazie. – YKY

+0

questo è dolce. grazie visionario – roopalgarg

+0

.... cool –

Problemi correlati