2012-08-09 41 views
21

Sto lavorando con i dati del sondaggio caricati da un file h5 come hdf = pandas.HDFStore('Survey.h5') tramite il pacchetto pandas. All'interno di questo DataFrame, tutte le righe sono i risultati di un singolo sondaggio, mentre le colonne sono le risposte per tutte le domande all'interno di un singolo sondaggio.Slice Pandas DataFrame per riga

Sto cercando di ridurre questo set di dati a un DataFrame minore, includendo solo le righe con una determinata risposta su una determinata domanda, cioè con lo stesso valore in questa colonna. Sono in grado di determinare i valori dell'indice di tutte le righe con questa condizione, ma non riesco a trovare come eliminare queste righe o creare un nuovo df solo con queste righe.

risposta

32
In [36]: df 
Out[36]: 
    A B C D 
a 0 2 6 0 
b 6 1 5 2 
c 0 2 6 0 
d 9 3 2 2 

In [37]: rows 
Out[37]: ['a', 'c'] 

In [38]: df.drop(rows) 
Out[38]: 
    A B C D 
b 6 1 5 2 
d 9 3 2 2 

In [39]: df[~((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))] 
Out[39]: 
    A B C D 
b 6 1 5 2 
d 9 3 2 2 

In [40]: df.ix[rows] 
Out[40]: 
    A B C D 
a 0 2 6 0 
c 0 2 6 0 

In [41]: df[((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))] 
Out[41]: 
    A B C D 
a 0 2 6 0 
c 0 2 6 0 
+0

è possibile tagliare il dataframe e dire (c = 5 c = 6) in questo modo: ---> df [((df.A == 0) & (df.B == 2) & (df.C == 5 o 6) & (df.D == 0))] – yoshiserry

+0

df [((df.A = = 0) & (df.B == 2) & df.C.isin ([5, 6]) & (df.D == 0))] o df [((df.A == 0) & (df.B == 2) & ((df.C == 5) | (df.C == 6)) & (df.D == 0))] –

2

Se si conosce già l'indice è possibile utilizzare .loc:

In [12]: df = pd.DataFrame({"a": [1,2,3,4,5], "b": [4,5,6,7,8]}) 

In [13]: df 
Out[13]: 
    a b 
0 1 4 
1 2 5 
2 3 6 
3 4 7 
4 5 8 

In [14]: df.loc[[0,2,4]] 
Out[14]: 
    a b 
0 1 4 
2 3 6 
4 5 8 

In [15]: df.loc[1:3] 
Out[15]: 
    a b 
1 2 5 
2 3 6 
3 4 7