Ecco alcune comparazioni
In [100]: df = DataFrame(randn(100000,10))
metodo semplice (ma credo gamma rende questa lenta), ma lavorerò indipendentemente l'indice (ad esempio, non deve essere un indice numerico)
In [96]: %timeit df.iloc[range(0,len(df),2)]
10 loops, best of 3: 21.2 ms per loop
I seguenti richiedono uno Int64Index
basato su intervallo (che è facile da ottenere, solo reset_index()
).
In [107]: %timeit df.iloc[(df.index % 2).astype(bool)]
100 loops, best of 3: 5.67 ms per loop
In [108]: %timeit df.loc[(df.index % 2).astype(bool)]
100 loops, best of 3: 5.48 ms per loop
assicurarsi di dare posizioni dell'indice
In [98]: %timeit df.take(df.index % 2)
100 loops, best of 3: 3.06 ms per loop
Come sopra ma senza conversioni su indicies negativi
In [99]: %timeit df.take(df.index % 2,convert=False)
100 loops, best of 3: 2.44 ms per loop
Questo vincitore è @AndyHayden soln; funziona solo su un singolo dtype
In [118]: %timeit DataFrame(df.values[::2],index=df.index[::2])
10000 loops, best of 3: 63.5 us per loop