2012-08-09 15 views
21

Pracuję z danymi ankietowymi załadowanymi z pliku h5 jako hdf = pandas.HDFStore('Survey.h5') przez pakiet pand. W ramach tego DataFrame wszystkie wiersze są wynikiem pojedynczej ankiety, natomiast kolumny są odpowiedziami na wszystkie pytania w ramach jednej ankiety.Panda segmentów DataFrame według wierszy

Mam zamiar zmniejszyć ten zbiór danych do mniejszego DataFrame, w tym tylko wierszy z pewną przedstawioną odpowiedzią na pewne pytanie, tj. Z całą tą samą wartością w tej kolumnie. Jestem w stanie określić wartości indeksu wszystkich wierszy z tym warunkiem, ale nie mogę znaleźć, jak usunąć tego wiersza lub utworzyć nowy plik df tylko z tych wierszy.

Odpowiedz

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

jest możliwe pokroić dataframe i powiedzieć (c = c = 5 lub 6) tak: ---> df [((df.A == 0) i (df.B ==2) i (df.C == 5 lub 6) i (df.D == 0))] – yoshiserry

+0

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

2

Jeśli już wiesz, indeks można użyć .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