맨땅에 헤딩하는 사람

Python DataFrame 최대 scalar 값의 index, column 구하기 본문

파이썬/이론

Python DataFrame 최대 scalar 값의 index, column 구하기

purplechip 2020. 8. 31. 12:56

pandasidxmax(), idxmin()이란 method를 제공한다. parameter axis에 따라(column 혹은 row 기준에 따라) 최대값의 index, column Series를 반환하는 기능을 가진다. 많이 사용하진 않겠지만 DataFrame의 2차원 데이터 중 가장 큰 스칼라 값 하나의 index와 column이 궁금한 경우가 있다. 이는 간단하게 idxmax()를 두 번 적용하는 것으로 해결할 수 있다. 아래 예제 코드를 보자. 

>>> import pandas as pd
>>> import numpy as np
 
>>> df = pd.DataFrame(np.array([[5,2,4],[6,1,5],[7,1,3]]),
...                   columns=['a''b''c'])
>>> df
   a  b  c
0  5  2  4
1  6  1  5
2  7  1  3
 
>>> idx = df.idxmax()
>>> idx
a    2
b    0
c    1
dtype: int64
 
>>> sr = pd.Series([df.at[idx[i], i] for i in idx.index],
...                index=idx.index)
>>> sr
a    7
b    2
c    5
dtype: int64
 
>>> idx_s = sr.idxmax()
>>> idx_s
'a'
 
>>> print(f"max : df.at[{idx[idx_s]}, {idx_s}] = {sr[idx_s]}")
max : df.at[2, a] = 7
cs
  1. 2차원의 DataFrame에서 idxmax() 메소드를 사용하여 각 column마다 가장 큰 값의 index를 얻는다. (변수명 idx)
  2. 이를 바탕으로 각 column마다 최대값을 가지는 Series를 생성한다. (변수명 sr)
  3. Series에서 idxmax() 메소드를 사용하여 최대 column 값을 얻는다. (변수명 idx_s)
  4. 최대값의 column은 idx_s이고 index는 idx[idx_s]임을 알 수 있으므로 값까지 추출해낼 수 있다. df.at[idx[idx_s], idx] 혹은 sr[idx_s]

최소값의 column과 index를 구하는 방법 역시 idxmin()을 사용하여 동일하게 구하면 된다.

Comments