Pandas: "자산별 그룹화"를 위한 간단한 공식


다음 기본 구문을 사용하여 pandas에서 “GROUP BY HAVING” SQL 문과 동등한 것을 실행할 수 있습니다.

 df. groupby (' some_column '). filter ( lambda x: some condition)

다음 예는 다음 pandas DataFrame에서 실제로 이 구문을 사용하는 방법을 보여줍니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team position points
0 AG 30
1 AF 22
2 FY 19
3 BG 14
4 BF 14
5 BF 11
6 GC 20
7 GC 28

예 1: Count를 갖는 팬더 그룹

다음 코드는 열의 값을 기준으로 행을 그룹화한 다음 개수가 2보다 큰 팀만 필터링하는 방법을 보여줍니다.

 #group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )


        team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11

팀 값이 “A” 또는 “B”인 행만 반환됩니다. 두 팀 모두 숫자가 2보다 큰 팀이기 때문입니다.

예 2: 평균을 가진 팬더 그룹

다음 코드는 열의 값을 기준으로 행을 그룹화한 다음 평균 점수 값이 20보다 큰 팀만 필터링하는 방법을 보여줍니다.

 #group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )

        team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28

평균 점수 값이 20보다 큰 두 팀이므로 팀 값이 “A” 또는 “C”인 행만 반환됩니다.

예 3: 합계를 갖는 팬더 그룹

다음 코드는 열의 값을 기준으로 행을 그룹화한 다음 포인트 합계가 정확히 48인 팀만 필터링하는 방법을 보여줍니다.

 #group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )

        team position points
6 C G 20
7 C G 28

팀 값이 “C”인 행만 반환됩니다. 이는 포인트 합계가 48인 유일한 팀이기 때문입니다.

추가 리소스

다음 튜토리얼에서는 Pandas에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Pandas: 열이 값과 일치하는 행의 인덱스 가져오기
Pandas: 특정 문자열이 포함된 열을 선택하는 방법
Pandas:열에 문자열이 포함되어 있는지 확인하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다