[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 : alabel 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 | | |…
💬 댓글