2017-12-01 12 views
0

의 다른 열을 기반으로 여러 조건으로 판다에 열 추가 첫 번째로 이것이 StackOverflow의 이미 어딘가에 있다면 사과드립니다. 한 시간 동안 실험 한 후 한 시간 동안 찾았지만 찾지 못했습니다. 나는 우아한 (아마 초등) 해결책이 있어야한다고 확신한다.데이터 프레임

나는 다음과 같은 데이터 프레임이 있습니다

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 
... 

등등.

나는 변형 사용하여 '전체'열을 추가하여 시작하려고 :

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

을하지만 원래의 각 행의 값에 의해이 dataframe의 값을 찾아 볼 수없는 것 데이터 프레임.

나는 람다 함수를 사용해 보았지만 '함수는 반복 가능하지 않다'라는 오류가 발생합니다.

작은 데이터 세트이므로 행 단위로 반복 할 수 있지만 미래에는이 옵션을 사용할 필요가 없을 때가 있습니다.

초보자 및 야심 찬 데이터 과학자를 도와주십시오.

답변

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

너무 감사 많이, 이것은 내가 바라는 바로 그 것이다. –