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 = 1
및 crash_drugs = 0
;
"음주 운전 중 충돌"은 다음과 같습니다. crash_drinking = 1
, crash_drugs = 0
, driver_drinking = 1,
및 driver_drugs is 0
;
crash_drinking = 0
및 crash_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()를하고 거기에서 ...해야합니까?
의 표현을 (열 이름이 다른) 일치하지 않습니다 dataframe의 당신의 정의. –
원하는 출력의 열이 입력과 다르다는 것을 의미합니까? 새 열은 원래 열과 같지 않습니다. 열의 조합이므로 차별화하고 싶습니다. 나는 그들을 되돌릴 수는 있지만, 그들이 동일하면 더 혼란 스러울 것이라고 생각했다. – ale19
아니요, 코드 바로 첫 번째 줄과 그 직후에 인쇄되는 데이터 프레임을 살펴보십시오. 열 이름이 서로 다르므로 혼동을 일으킬 수 있습니다. –