본문 바로가기

STUDY/Python

[Pandas] idxmax(), idxmin()

idxmax()와 idxmin()은 행 별/열 별로 최대값/최소값의 인덱스(행 인덱스, 열 인덱스)를 반환하는 메서드다.

 

idxmax(), idxmin()은 다음 파라미터들을 갖는다.

 

 - axis : 0 / 'index'  or  1 / 'columns'   (기본값 : 0) 

     0(행 방향) :  열(column)별 최대(최소)값의 행 인덱스 값 반환

     1(열 방향) :  행(row)별 최대(최소)값의 열 인덱스 값 반환

 - skipna : True  or  False  (기본값 : True)

     True  :  결측치는 고려하지 않는다.

     False :  결측치가 있으면 해당 행/열의 인덱스 대신 NaN을 출력한다.

 - numeric_only :True  or  False  (기본값 : False)  =>

     int, float형 데이터만 출력할지 다 출력할지 결정하는 파라미터지만, 크게 신경쓰지 않아도 괜찮을 듯.

   

백문이 불여일견이니, axis와 skipna에 대해 간단한 예시를 통해 알아보자.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 4, np.nan, 2],
    'B': [5, np.nan, 8, 7],
    'C': [12, 10, 11, 9]
})

# df
    A    B    C
0   1.0  5.0  12
1   4.0  NaN  10
2   NaN  8.0  11
3   2.0  7.0  9

 

 

1. axis

print(df.idxmax())  # 열 별 최대값을 갖는 행의 인덱스 값 반환
------------------
A    1
B    2
C    0
dtype: int64


print(df.idxmin())  # 열 별 최소값을 갖는 행의 인덱스 값 반환
------------------
A    0
B    0
C    3
dtype: int64


print(df.idxmax(axis=1))  # 행 별 최대값을 갖는 열의 인덱스 값 반환
------------------------
0    C
1    C
2    C
3    C
dtype: object


print(df.idxmin(axis=1)) # 행 별 최소값을 갖는 열의 인덱스 값 반환
------------------------
0    A
1    A
2    B
3    A
dtype: object

 

 

2. skipna

print(df.idxmax())  # NaN값을 고려하지 않고 열 별 최대값을 갖는 행의 인덱스 값 반환
------------------
A    1
B    2
C    0
dtype: int64


print(df.idxmin())  # NaN값을 고려하지 않고 열 별 최소값을 갖는 행의 인덱스 값 반환
------------------
A    0
B    0
C    3
dtype: int64


print(df.idxmax(skipna=False))  # A, B열의 값 중에 결측치가 있어서 NaN 출력.
------------------------------
A    NaN
B    NaN
C    0.0
dtype: float64


print(df.idxmin(skipna=False))  # A, B열의 값 중에 결측치가 있어서 NaN 출력.
------------------------------
A    NaN
B    NaN
C    3.0
dtype: float64

 

 ** 위 예시의 아래 2개는 왜 dtype이 float이고 열 C의 값이 왜 실수형이 되었을까?

 => 파이썬에서 NaN, 결측치의 데이터 타입이 float이기 때문.