Milky's note

[Pandas] 데이터프레임 컬럼 순서 변경 본문

Python/요약 정리

[Pandas] 데이터프레임 컬럼 순서 변경

밀뿌 2023. 11. 13. 22:13

 

 

[Pandas] 데이터프레임 groupby로 연산된 컬럼 추가 (transform)

요즘에 지하철 데이터를 가지고 토이 프로젝트를 진행해보려고 서울시에서 제공하는 오픈 API를 써서 데이터를 수집하고 있다. daily로 역, 호선 별 지하철 승하차 인구 데이터를 불러왔는데 이

milkyspace.tistory.com

 

이전 글에서 groupby, transform으로 연산된 컬럼을 추가하였다.

그 컬럼은 데이터프레임의 가장 뒤로 추가가 되었는데 데이터프레임의 가독성을 높이기 위해서

컬럼의  순서를 재배치하는 방법을 설명하려고 한다.

 

1. 컬럼 순서를 직접 입력

가장 직관적이고 컬럼이 적을 때 사용할 수 있는 방법이다.

df = df[['USE_MON', 'LINE_NUM', 'SUB_STA_NM', 'FOUR_RIDE_NUM', 'FOUR_ALIGHT_NUM' ,'SUM_RIDE', 'SUM_ALIGHT']]
df

 

 

하지만 .... 이 데이터프레임의 컬럼 갯수는 54개이다.

 

하나씩 직접 입력하려면 .......  ㅈㅈ

 

2. slice 이용하기

그래서 다른 방법은 컬럼을 리스트로 만들어서 순서를 바꿀 컬럼을 A리스트로 만들고 이 컬럼을 제외한 컬럼을 B 리스트로 만든 뒤에 B + A로 순서를 재배치하여 컬럼순서를 변경하는 방법이다.

 

내가 순서를 변경할 컬럼은 다음과 같은데 파란색으로 표시한 컬럼을 맨 뒤로 보내려고 한다.

 

 

먼저 순서를 변경할 컬럼만 리스트로 만들어준다.

a = df.columns[-3:-2].to_list()
print('a : ', a)
a :  ['WORK_DT']

 

그 다음으로 위에서 생성한 리스트의 컬럼만 제외하고 나머지 컬럼들을 리스트로 만들어준다.

ex_a = df.drop(columns = df.columns[[-3]]).columns[:].to_list()
#  ==   ex_a = df.drop(['WORK_DT'], axis=1).columns[:].to_list()
print('ex_a : ', ex_a)
ex_a :  ['USE_MON', 'LINE_NUM', 'SUB_STA_NM', 'FOUR_RIDE_NUM', 'FOUR_ALIGHT_NUM',  ... 'THREE_RIDE_NUM', 'THREE_ALIGHT_NUM', 'SUM_RIDE', 'SUM_ALIGHT']

 

마지막으로 a 리스트를 ex_a 리스트 뒤에 붙여주어 컬럼의 순서를 변경한다.

reorder = ex_a + a
print('reorder : ', reorder)
reorder :  ['USE_MON', 'LINE_NUM', 'SUB_STA_NM', 'FOUR_RIDE_NUM', 'FOUR_ALIGHT_NUM', ... 'THREE_RIDE_NUM', 'THREE_ALIGHT_NUM', 'SUM_RIDE', 'SUM_ALIGHT', 'WORK_DT']

 

컬럼 리스트를 확인하면 a리스트(WORK_DT)가 가장 뒤로 위치해있는 것을 확인 할 수 있다.

이 컬럼 리스트들로 데이터프레임을 만들어준다.

 

a = df.columns[-3:-2].to_list()

ex_a = df.drop(columns = df.columns[[-3]]).columns[:].to_list()
#  ==   ex_a = df.drop(['WORK_DT'], axis=1).columns[:].to_list()

reorder = ex_a + a

df = df[reorder]
df

Comments