2016-09-24 1 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