Slice Pandas DataFrame par ligne

je travaille avec des données d'enquête chargées à partir d'un fichier h5 comme hdf = pandas.HDFStore('Survey.h5') à travers le paquet pandas. Dans ce DataFrame , toutes les lignes sont les résultats d'un seul sondage, alors que les colonnes sont les réponses pour toutes les questions d'un même sondage.

j'ai l'intention de réduire cet ensemble de données à un plus petit DataFrame comprenant seulement les lignes avec une certaine réponse représentée sur une certaine question, c.-à-d. avec toute la même valeur dans cette colonne. Je suis capable de déterminer les valeurs d'index de toutes les lignes avec cette condition, mais je ne peux pas trouver comment supprimer cette ligne ou faire un nouveau df avec ces lignes seulement.

24
demandé sur piRSquared 2012-08-09 14:15:27

2 réponses

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
35
répondu Wouter Overmeire 2012-08-09 11:26:08

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
3
répondu Akavall 2016-12-11 03:14:24