2013-03-21 32 views
21

Mam ramkę danych. Następnie mam warunek logiczny, za pomocą którego mogę utworzyć kolejną ramkę danych, usuwając niektóre wiersze. Nowa ramka danych pomija jednak indeksy dla usuniętych wierszy. W jaki sposób mogę go ponownie wygenerować ponownie, bez pomijania? Oto próbka kodowane w celu wyjaśnieniaPonowne indeksowanie ramek danych

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 

chcę, żeby wyglądać tak:

0 
0 0 
1 1 
2 3 
3 4 

Dzięki.

Odpowiedz

36

Jednym ze sposobów jest użycie 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

Dziękuję, że jest dokładnie to, czego szukam. – user2133151

+7

Wierzę, że musisz również podać 'inplace = True', w przeciwnym razie nie wpłynie to na' df_no_2' i zostanie utworzona nowa ramka danych: 'df_no_2.reset_index (drop = True, inplace = True)' (panda v0. 15.2) – silentser

+1

Zazwyczaj po prostu przypisujesz wynik do czegoś (np. 'Df_no_2 = df_no_2.reset_index (drop = True)'), tak jak robisz to w przypadku większości operacji pand. – DSM

Powiązane problemy