2012-08-09 18 views
21

Estoy trabajando con datos de encuestas cargados desde un archivo h5 como hdf = pandas.HDFStore('Survey.h5') mediante el paquete pandas. Dentro de este DataFrame, todas las filas son el resultado de una sola encuesta, mientras que las columnas son las respuestas para todas las preguntas en una sola encuesta.Slice Pandas DataFrame por fila

Estoy tratando de reducir este conjunto de datos a un menor DataFrame incluyendo solo las filas con una cierta respuesta representada en una determinada pregunta, es decir, con el mismo valor en esta columna. Puedo determinar los valores de índice de todas las filas con esta condición, pero no puedo encontrar cómo eliminar estas filas o crear una nueva df con estas filas solamente.

Respuesta

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

es posible cortar la trama de datos y decir (c = 5 o C = 6) de esta manera: ---> 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

Si ya conoce el índice puede utilizar .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 
Cuestiones relacionadas