2016-10-21 13 views
3
test = pd.DataFrame({'injury':['A', 'B', 'B', 'A', 'A', 'C', 'A', 'B', 'A'], 'crash_drinking':[1, 1, 1, 0, 0, 0, 1, 0, 1], 'crash_drugs':[0,0,0,1,1,0,0,1,1], 'driver_drinking':[1,1,0,0,0,0,0,1,0], 'driver_drugged':[0,0,0,0,1,0,0,1,0]}) 

    crash_drinking crash_drugs driver_drinking driver_drugged injury 
0    1   0    1    0  A 
1    1   0    1    0  B 
2    1   0    0    0  B 
3    0   1    0    0  A 
4    0   1    0    1  A 
5    0   0    0    0  C 
6    1   0    0    0  A 
7    0   1    1    1  B 
8    1   1    0    0  A 

을 통해 복잡한 필터가 내 출력 (열 이름은 위의 dataframe에서 그들을 구별하기 위해 변경) 같은 것을보고 싶지 :팬더 : GROUPBY

drinking crash drinking driver in crash drugged crash drugged driver in crash 
A    2      1     2       1 
B    2      1     1       0 

경우 첫 번째 행, "injury" = 'A'를 들어, 다음 필터가 제 위치에 있습니다.

"음주 충돌"은 카운트입니다. crash_drinking = 1crash_drugs = 0;

"음주 운전 중 충돌"은 다음과 같습니다. crash_drinking = 1, crash_drugs = 0, driver_drinking = 1,driver_drugs is 0;

crash_drinking = 0crash_drugs = 1;는 "사고로 드라이버를 마약에 취한"여기서

은 "충돌을 마약에 취한"입니다 crash_drinking = 0, crash_drugs = 1, driver_drinking = 0,driver_drugs = 1입니다. 행 B에 대한 동일

, "injury" = 'B'.

가 지금 난 그냥 .loc 필터의 무리가 설정 한 곳이있어 제외 :

test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0)] 
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 0) & (test['crash_drugs'] == 1)] 
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0) & (test['driver_drinking'] == 1) & (test['driver_drugged'] == 0)] 

차라리이 작업을 수행 할 것 groupby 또는 .apply()를 통해 모든 쿼리를 반복하는 것보다 빠르다고 생각합니다. 그러나 나는 그것을하기위한 적절한 구문이 확실하지 않습니다. 어쩌면 내가 "부상"열에 .groupby()를하고 거기에서 ...해야합니까?

+0

의 표현을 (열 이름이 다른) 일치하지 않습니다 dataframe의 당신의 정의. –

+0

원하는 출력의 열이 입력과 다르다는 것을 의미합니까? 새 열은 원래 열과 같지 않습니다. 열의 조합이므로 차별화하고 싶습니다. 나는 그들을 되돌릴 수는 있지만, 그들이 동일하면 더 혼란 스러울 것이라고 생각했다. – ale19

+0

아니요, 코드 바로 첫 번째 줄과 그 직후에 인쇄되는 데이터 프레임을 살펴보십시오. 열 이름이 서로 다르므로 혼동을 일으킬 수 있습니다. –

답변

1
result = pd.DataFrame() 
result['drinking crash'] = (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0) 
result['drinking driver in crash'] = ((test['crash_drinking'] == 1) & (test['crash_drugs'] == 0) 
             & (test['driver_drinking'] == 1) & (test['driver_drugs'] == 0)) 
result['drugged crash'] = (test['crash_drinking'] == 0) & (test['crash_drugs'] == 1) 
result['drugged driver in crash'] = ((test['crash_drinking'] == 0) & (test['crash_drugs'] == 1) 
            & (test['driver_drinking'] == 0) & (test['driver_drugs'] == 1)) 
result = result.astype(int) 
result['injury'] = test['injury'] 
result.groupby('injury').sum() 

resulting dataframe

관련 문제