본문으로 건너뛰기
김신건의 로그

[Pandas] idxmax / idxmin

· 수정 · 📖 약 1분 · 236자/단어 #python #pandas #idxmax #idxmin
Pandas idxmax, Pandas idxmin, argmax argmin pandas

정의

  • idxmax() : 최댓값의 index 라벨 반환
  • idxmin() : 최솟값의 index 라벨

max(), min() 을 반환한다면 이 함수들은 위치 를 반환. SQL 에서 “max 인 행의 다른 컬럼” 을 가져올 때 idiom.

기본

python
import pandas as pd
s = pd.Series([10, 50, 30, 20], index=['a','b','c','d'])
print('max value:', s.max())
print('idxmax  :', s.idxmax())
print('min value:', s.min())
print('idxmin  :', s.idxmin())
결과
max value: 50
idxmax  : b
min value: 10
idxmin  : a

label index ‘b’ 가 최댓값의 위치.

DataFrame.idxmax (각 컬럼 / 행)

df.idxmax()              # 각 컬럼의 최댓값 행 label (default axis=0)
df.idxmax(axis=1)        # 각 행의 최댓값 컬럼 label
python
import pandas as pd
df = pd.DataFrame({
  'math': [90, 80, 70],
  'eng':  [85, 95, 75],
  'sci':  [95, 70, 80],
}, index=['Alice','Bob','Charlie'])
print(df.idxmax())          # 각 과목의 최고점 학생
print('---')
print(df.idxmax(axis=1))    # 각 학생의 최고 과목
결과
math      Alice
eng         Bob
sci       Alice
dtype: object
---
Alice       sci
Bob         eng
Charlie     sci
dtype: object

자주 쓰는 패턴

1. max 값을 가진 행 전체 가져오기

df.loc[df['salary'].idxmax()]
# salary 가 최대인 행 (Series)

2. groupby 의 각 그룹 최댓값 행

df.loc[df.groupby('city')['salary'].idxmax()]
# 각 도시의 최고 연봉자 행 전체

이게 SQL 의 SELECT * FROM t WHERE (city, salary) IN (SELECT city, MAX(salary) FROM t GROUP BY city) 패턴.

3. 가장 자주 등장하는 값

df['category'].value_counts().idxmax()
# 또는 df['category'].mode().iloc[0]

NaN 처리

s = pd.Series([1, None, 3])
s.idxmax()                  # NaN 자동 skip → 3 의 index
s.idxmax(skipna=False)      # NaN 있으면 에러 또는 NaN 반환

numpy argmax 와의 비교

함수반환NaN 처리
np.argmax(arr)정수 위치NaN 도 비교
s.idxmax()index 라벨NaN skip
s.argmax()정수 위치NaN skip (pandas 0.25+)

s.idxmax() 가 라벨 기반이라 .loc[] 와 즉시 호환된다.

함정

1. 모두 NaN 이면

pd.Series([None, None]).idxmax()
# ValueError 또는 NaN

2. 동률

pd.Series([1, 1, 1]).idxmax()
# 0 (첫 번째)

여러 개가 최대면 첫 등장 위치 만 반환.

3. 빈 Series

pd.Series([], dtype=float).idxmax()    # ValueError

참고

이 글의 용어 (3개)
[Pandas] groupbypandas
정의 는 데이터를 그룹으로 나누고 (split), 각 그룹에 함수를 적용 (apply), 결과를 합쳐 (combine) 새 DataFrame 으로 만드는 split-apply-c…
[Pandas] mode / factorizepandas
정의 - : 가장 빈번한 값 (최빈값) 반환 - : 고유값을 정수 코드로 변환 (label encoding) mode <CodeWithOutput language="python"…
[Pandas] Seriespandas
정의 는 1차원 레이블 배열. NumPy + 의 결합. 의 한 열이 곧 Series. 핵심 속성 | 속성 | 의미 | |:---|:---| | | numpy array | | |…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기