2013-03-21 7 views
21

Ich habe einen Datenrahmen. Dann habe ich eine logische Bedingung, mit der ich einen anderen Datenrahmen durch Entfernen einiger Zeilen erstellen kann. Der neue Datenrahmen überspringt jedoch Indizes für entfernte Zeilen. Wie kann ich es sequenziell neu indizieren ohne zu überspringen? Hier ist ein BeispielReindexing Datenrahmen

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 zu klären codiert:

0 
0 0 
1 1 
3 3 
4 4 

Ich möchte es so aussehen:

0 
0 0 
1 1 
2 3 
3 4 

Dank.

Antwort

36

Eine Möglichkeit ist reset_index zu verwenden:

>>> 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

Danke, dass ist genau das, was ich suche. – user2133151

+7

Ich glaube, dass Sie auch 'inplace = True' angeben müssen, sonst wird' df_no_2' nicht beeinflusst und stattdessen ein neuer Datenrahmen erstellt: 'df_no_2.reset_index (drop = True, inplace = True)' (pandas v0. 15.2) – silentser

+1

In der Regel wird das Ergebnis einfach einem Objekt zugewiesen (zB 'df_no_2 = df_no_2.reset_index (drop = True)'), wie bei den meisten Pandas-Operationen. – DSM

Verwandte Themen