2013-03-21 21 views
21

Ho un frame di dati. Quindi ho una condizione logica con cui creo un altro frame di dati rimuovendo alcune righe. Il nuovo data frame tuttavia salta gli indici per le righe rimosse. Come posso farlo reindicizzare sequenzialmente senza saltare? Ecco un esempio in codice per chiarireReindexing dataframes

import pandas as pd 
import numpy as np 

jjarray = np.array(range(5)) 
eq2 = jjarray == 2 
neq2 = np.logical_not(eq2) 

jjdf = pd.DataFrame(jjarray) 
jjdfno2 = jjdf[neq2] 

jjdfno2 

Out:

0 
0 0 
1 1 
3 3 
4 4 

voglio farlo sembrare come questo:

0 
0 0 
1 1 
2 3 
3 4 

Grazie.

risposta

36

Un modo è quello di utilizzare reset_index:

>>> df = pd.DataFrame(range(5)) 
>>> eq2 = df[0] == 2 
>>> df_no_2 = df[~eq2] 
>>> df_no_2 
    0 
0 0 
1 1 
3 3 
4 4 
>>> df_no_2.reset_index(drop=True) 
    0 
0 0 
1 1 
2 3 
3 4 
+0

Grazie che è esattamente quello che sto cercando. – user2133151

+7

Credo che sia necessario specificare 'inplace = True', altrimenti' df_no_2' non sarà interessato e verrà invece creato un nuovo frame di dati: 'df_no_2.reset_index (drop = True, inplace = True)' (panda v0. 15.2) – silentser

+1

Solitamente si assegna semplicemente il risultato a qualcosa (es. 'Df_no_2 = df_no_2.reset_index (drop = True)'), come per la maggior parte delle operazioni di panda. – DSM