web-dev-qa-db-fra.com

Slice Pandas DataFrame by Row

Je travaille avec des données d'enquête chargées à partir d'un fichier h5 en tant que hdf = pandas.HDFStore('Survey.h5') via le package pandas. Dans ce DataFrame, toutes les lignes sont les résultats d'un enquête unique, tandis que les colonnes sont les réponses à toutes les questions d'une enquête unique.

Je vise à réduire cet ensemble de données à un DataFrame plus petit, comprenant uniquement les lignes avec une certaine réponse représentée sur une certaine question, c'est-à-dire avec toutes la même valeur dans cette colonne. Je peux déterminer les valeurs d'index de toutes les lignes avec cette condition, mais je ne trouve pas comment supprimer ces lignes ou créer un nouveau df avec ces lignes uniquement.

26
ruben baetens
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
40
Wouter Overmeire

Si vous connaissez déjà l'index, vous pouvez utiliser .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
8
Akavall