Python/Pandas

[Pandas] 파이썬 데이터프레임 최대/최소값 위치 인덱스, 행 탐색 : idxmax(), idxmin()

jimmy_AI 2022. 6. 12. 22:28
반응형

파이썬 판다스 max/min 위치 index, row 찾기

파이썬의 데이터프레임 내에서 최대 혹은 최소값을 가지는 행의 위치에 대한 인덱스나
행 전체를 가져오는 방법에 대하여 idxmax, idxmin 함수의 사용법을 토대로
간단하게 정리해보겠습니다.

용이한 설명을 위하여, 아래와 같은 간단한 데이터프레임 df를 예시로 들어보겠습니다.

import pandas as pd

a = {"이름" : ['AAA', 'BBB', 'CCC', 'DDD'], "국어" : [80, 100, 90, 70], "수학" : [100, 90, 100, 80]}
df = pd.DataFrame(a)
df = df.set_index("이름")

df

여기서는 참고로 "이름" 열이 인덱스로 지정되어 있습니다.

 

데이터프레임 전체 각 컬럼의 최대/최소값 위치 인덱스 찾기

df.idxmax() 형태의 코드로 각 열별로 최대값의 위치 인덱스를 모아서 가져올 수 있습니다.
(df.idxmin()으로 최소값의 위치 인덱스를 가져오는 것도 가능합니다.)

만일, 최대 혹은 최소값이 여러 개인 경우, 더 앞의 위치에 등장하는 인덱스를 반환합니다.
(수학 column에서는 AAA와 CCC가 동점이지만 AAA 인덱스가 반환되었습니다.)

단, 문자열 등 숫자가 아닌 자료형으로 구성된 열이 포함되면 오류가 발생하니 주의가 필요합니다.
(TypeError: reduction operation 'argmax' not allowed for this dtype)

df.idxmax()

# 결과
국어    BBB
수학    AAA
dtype: object

 

반응형

 

특정 컬럼의 최대/최소값 위치 인덱스 찾기

만일, 특정 열의 최대값 위치 인덱스를 가져오고 싶다면, df[열 이름].idxmax() 형태로
코드를 작성해주시면 됩니다.

idxmin() 함수도 같은 원리 적용이 가능하며, 해당 열이 숫자 자료형이 아니라면
마찬가지로 위에서 언급했던 TypeError가 발생합니다.

df["국어"].idxmax() # BBB

 

 

최대/최소값을 가지는 행 전체 가져오기

idxmax 혹은 idxmin 결과로 얻은 인덱스 정보를 loc 함수에 input으로 넣으면
해당 위치의 행 전체를 가져올 수 있습니다.

"국어" 컬럼의 값이 최대인 행을 가져오는 예시는 아래와 같습니다.

df.loc[df["국어"].idxmax()]

# 결과
국어    100
수학     90
Name: BBB, dtype: int64