본문 바로가기
판다스/판다스 팁

[pandas] 데이터 프레임을 가로로 정렬하는 방법

by 김판다t 2023. 11. 15.
example code

 

 

import pandas as pd
data = {'col1': [6, 9, 7, 4, 3, 9], 'col2': [1, 8, 1, 7, 3, 5], 
        'col3': [6, 4, 2, 3, 1, 9], 'col4': [2, 8, 2, 7, 1, 3]}
df = pd.DataFrame(data)

 

 

 

문제

 

 

예제의 데이터 프레임 df를 아래와 같은 데이터 프레임이 있을 때 가로로 값을 정렬하고 싶다면 어떻게 해야 할까?

 

 

 

 

(위 그림의 첫째 행을 보면 6, 1, 6, 2의 순서였지만 1, 2, 6, 6이 되었다)

 

 

 

 

해결

 

 

이 경우 pandas 라이브러리로도 가능하지만 numpy를 쓰는 것이 속도면에서 우월하다

 

numpy 함수 np.sort를 사용하자

 

 

import numpy as np
np.sort(df)

 

 

결과:

 

array([[1, 2, 6, 6],
       [4, 8, 8, 9],
       [1, 2, 2, 7],
       [3, 4, 7, 7],
       [1, 1, 3, 3],
       [3, 5, 9, 9]], dtype=int64)

 

 

np.sort 함수로 가로로 정렬이 되었다.

 

다만 np.sort는 numpy 함수이기에 데이터 프레임이 아니라 넘파이 array를 반환한다

 

 

 

그 문제는 위 결과를 pd.DataFrame 함수로 데이터 프레임으로 만들어 주면 된다

 

out = pd.DataFrame(np.sort(df), index=df.index, columns=df.columns)

 

 

out:

 

 

 

 

완성이다

 

 

속도측정

 

 

 

np.sort 함수를 사용하는 이유는 속도 때문이다. 10000000 X 4의 랜덤한 데이터프레임을 만들어 시간측정을 해보자

 

 

 

import pandas as pd
import numpy as np
import time


# 10000000 X 4의 랜덤 데이터프레임 df 생성

df = pd.DataFrame(np.random.randint(1, 10, (10000000, 4)))
df = df.set_axis(df.columns + 1, axis=1).add_prefix('col')


# 가로로 정렬하고 시간 측정

start = time.time()

out = pd.DataFrame(np.sort(df), index=df.index, columns=df.columns)

end = time.time()

print(f"{end - start:.5f} sec")

 

 

결과:

 

0.42066 sec

 

 

 

 

천만행을 정렬해도 0.42초 밖에 걸리지 않는다. 그래서 매우 유용하다

 

 

 

 

유튜브에서 판다스 강의 중입니다

 

https://www.youtube.com/@KimPandas