2012-08-09 10 views
21

나는 팬더 패키지를 통해 h5 파일에서로드 된 설문 조사 데이터를 hdf = pandas.HDFStore('Survey.h5')으로 작업하고 있습니다. 이 DataFrame 내에서 모든 행은 단일 설문 조사의 결과이지만 열은 단일 설문 조사 내의 모든 질문에 대한 답변입니다.Slice Pandas DataFrame by Row

특정 질문에 대해 설명 된 답변이있는 행만 포함하는이 데이터 집합을 더 작게 줄이려고합니다. 즉이 열에있는 모든 값이 동일합니다. 이 조건을 가진 모든 행의 색인 값을 확인할 수 있지만, 행을 삭제하거나이 행만 사용하여 새 df를 만드는 방법을 찾을 수 없습니다. 이미 인덱스를 알고 있다면

답변

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

가 dataframe를 슬라이스하고 말을 할 수 있습니다 (C = 5 또는 c = 6)과 같이 : ---> DF [df.A == 0) & (df.C == 5 또는 6) & (df.D == 0))] – yoshiserry

+0

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

2

당신이 .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