Pandas: nlargest()와 함께 groupby를 사용하는 방법


다음 구문을 사용하여 pandas DataFrame에서 그룹별로 n개의 가장 큰 값을 표시할 수 있습니다.

 #display two largest values by group
df. groupby (' group_var ')[' values_var ']. nlargest ( 2 )

그리고 다음 구문을 사용하여 Pandas DataFrame의 그룹당 n개의 가장 큰 값에 대해 특정 작업(합계 계산 등)을 수행할 수 있습니다.

 #find sum of two largest values by group
df. groupby (' group_var ')[' values_var ']. apply ( lambda grp: grp.nlargest ( 2 ) .sum ())

다음 예에서는 다음 pandas DataFrame에서 실제로 각 메서드를 사용하는 방법을 보여줍니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   ' points ': [12, 29, 34, 14, 10, 11, 7, 36, 34, 22]})

#view DataFrame
print (df)

  team points
0 to 12
1 to 29
2 to 34
3 to 14
4 to 10
5 B 11
6 B 7
7 B 36
8 B 34
9 B 22

예시 1: 그룹별로 N개의 가장 큰 값 표시

다음 구문을 사용하여 팀별 로 그룹화된 두 개의 가장 큰 점수 값을 표시할 수 있습니다.

 #display two largest points values grouped by team
df. groupby (' team ')[' points ']. nlargest ( 2 )

team   
At 2 34
      1 29
B 7 36
      8 34
Name: points, dtype: int64

결과에는 원본 DataFrame의 인덱스 위치와 함께 각 의 가장 큰 두 포인트 값이 표시됩니다.

예시 2: 그룹당 N개의 가장 큰 값에 대해 작업 수행

다음 구문을 사용하여 팀별 로 그룹화된 두 개의 가장 큰 포인트 값의 합을 계산할 수 있습니다.

 #calculate sum of two largest points values for each team
df. groupby (' team ')[' points ']. apply ( lambda grp: grp.nlargest ( 2 ) .sum ())

team
At 63
B70
Name: points, dtype: int64

결과를 해석하는 방법은 다음과 같습니다.

  • A팀의 가장 큰 두 포인트 값의 합은 63 이다.
  • B팀의 가장 큰 두 포인트 값의 합은 70 이다.

유사한 구문을 사용하여 팀별 로 그룹화된 두 개의 가장 큰 포인트 값의 평균을 계산할 수 있습니다.

 #calculate mean of two largest points values for each team
df. groupby (' team ')[' points ']. apply ( lambda grp: grp.nlargest ( 2 ) .mean ())

team
At 31.5
B 35.0
Name: points, dtype: float64

결과를 해석하는 방법은 다음과 같습니다.

  • A팀의 최고점 2개 점수의 평균은 31.5점 이다.
  • B팀의 최고점 2개 점수의 평균은 35.0 이다.

참고 : 여기에서 GroupBy 기능에 대한 전체 문서를 찾을 수 있습니다.

추가 리소스

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

Pandas: 그룹당 누적 합계를 계산하는 방법
Pandas: 그룹별로 고유한 값을 계산하는 방법
Pandas: 그룹별로 모드를 계산하는 방법
Pandas: 그룹별 상관관계를 계산하는 방법

의견을 추가하다

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