2017-12-01 9 views
0

最初は、これが既にStackOverflowのどこかにある場合は謝罪し、1時間実験した後1時間検索しました。私はエレガントな(そしておそらく初級の)解決策がなければならないと確信しています。データフレーム内の他の列に基づくいくつかの条件を持つパンダに列を追加

は、私は、次のデータフレームがあります。

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 

をそして、私は成功の割合を与える列「割合」を追加したい/各部門に性別によって応募者を失敗しました。

だから:

df.loc[0, 'Proportion'] = 512/(512+313) = 0.6206 
df.loc[1, 'Proportion'] = 313/(512+313) = 0.3794 
... 

のように。

Iがのバリエーションを使用して、「トータル」欄を追加することによって、オフを開始しようとした:

data.groupby(['Dept', 'Gender'])[['Freq']].sum() 

しかし、私は、元の各行の値によって、このデータフレームの値をルックアップすることができないようデータフレーム。

ラムダ関数を使ってみましたが、 '関数は反復不可能です'というエラーが出ます。

小さなデータセットであるため、行ごとにループすることができますが、将来このオプションを選択する必要はありません。

初心者や志望のデータ科学者を助けてください。

答えて

1

あなたは、元のDataFrameと同じサイズのシリーズのためにtransformdivで列を分割することができます

data['new'] = data['Freq'].div(data.groupby(['Dept', 'Gender'])['Freq'].transform('sum')) 

またはカスタム機能でapplyを使用します。

data['new'] = data.groupby(['Dept', 'Gender'])['Freq'].apply(lambda x: x/x.sum()) 

print (data) 
     Admit Gender Dept Freq  new 
0 Admitted Male A 512 0.620606 
1 Rejected Male A 313 0.379394 
2 Admitted Female A 89 0.824074 
3 Rejected Female A 19 0.175926 
4 Admitted Male B 353 0.630357 
5 Rejected Male B 207 0.369643 
6 Admitted Female B 17 0.680000 
7 Rejected Female B  8 0.320000 
8 Admitted Male C 120 0.369231 
9 Rejected Male C 205 0.630769 
10 Admitted Female C 202 0.340641 
11 Rejected Female C 391 0.659359 
12 Admitted Male D 138 0.330935 
13 Rejected Male D 279 0.669065 
14 Admitted Female D 131 0.349333 
15 Rejected Female D 244 0.650667 
16 Admitted Male E 53 0.277487 
17 Rejected Male E 138 0.722513 
18 Admitted Female E 94 0.239186 
19 Rejected Female E 299 0.760814 
20 Admitted Male F 22 0.058981 
21 Rejected Male F 351 0.941019 
22 Admitted Female F 24 0.070381 
23 Rejected Female F 317 0.929619 
+0

はそうありがとうこれはまさに私が望んでいたものです。 –

関連する問題