2016-09-24 8 views
0

데이터 프레임 내의 특정 그룹 (예 : 아래 데이터 프레임의 인정 된 여성)을 필터링하거나 하위 집합으로 만들려면 어떻게해야합니까? 저는성에 따라 입학 거부율을 합산하려고합니다. 이 데이터 프레임은 작지만, 훨씬 더 큰 경우, 수천 줄의 예를 들어, 개별 값을 인덱싱 할 수없는 경우를 가정 해 봅시다.팬더의 데이터 프레임 필터링

 Admit Gender Dept Freq 
0 Admitted Male A 512 
1 Rejected Male A 313 
2 Admitted Female A 89 
3 Rejected Female A 19 
4 Admitted Male B 353 
5 Rejected Male B 207 
6 Admitted Female B 17 
7 Rejected Female B  8 
8 Admitted Male C 120 
9 Rejected Male C 205 
10 Admitted Female C 202 
11 Rejected Female C 391 
12 Admitted Male D 138 
13 Rejected Male D 279 
14 Admitted Female D 131 
15 Rejected Female D 244 
16 Admitted Male E 53 
17 Rejected Male E 138 
18 Admitted Female E 94 
19 Rejected Female E 299 
20 Admitted Male F 22 
21 Rejected Male F 351 
22 Admitted Female F 24 
23 Rejected Female F 317 
+0

'groupby'을 살펴보십시오. – acushner

+0

Ayhan, 질문을 편집 해 주셔서 감사합니다. –

+0

Ami, 사본 인 경우 친절하게 직접 원본 게시물로 이동하십시오. –

답변

1

데이터를 필터링하려면 매우 포괄적 인 query 기능을 사용할 수 있습니다.

# Test data 
df = DataFrame({'Admit': ['Admitted', 'Rejected', 'Admitted', 'Rejected', 'Admitted', 'Rejected', 'Admitted'], 
     'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Male', 'Female'], 
     'Freq': [512, 313, 89, 19, 353, 207, 17], 
     'Gender Dept': ['A', 'A', 'A', 'A', 'B', 'B', 'B']}) 

df.query('Admit == "Admitted" and Gender == "Female"') 

     Admit Freq Gender Gender Dept 
2 Admitted 89 Female   A 
6 Admitted 17 Female   B 

요약하면 데이터 사용 groupby입니다.

group = df.groupby(['Admit', 'Gender']).sum() 
print(group) 

       Freq 
Admit Gender  
Admitted Female 106 
     Male  865 
Rejected Female 19 
     Male  520 

생성 된 MultiIndex을 부분 집합으로 지정하면 필터를 적용 할 수 있습니다.

group.loc[('Admitted', 'Female')] 

Freq 106 
Name: (Admitted, Female), dtype: int64 
관련 문제