예제
import pandas as pd
data1 = {'col1': ['b', 'a', 'B', 'c', 'a', 'a', 'a', 'B'],
'col2': ['ab', 'abc', 'aa', 'abcd', 'bbb', 'a', 'b', 'c'],
'col3': [7, 9, 2, 2, 2, 6, 7, 9]}
df = pd.DataFrame(data1)
df:
col1은 대소문자를 가리지 않고 정렬하고,
col2는 글자수에 따라 정렬하고,
col3는 숫자에 따라 오름차순으로 정렬합니다.
정렬의 순서는 col1 → col2 → col3 열의 순서입니다.
물론 정렬용 열을 만들어 정렬을 수행 뒤 삭제를 할 수 있습니다.
out = (df
.assign(col4=df['col1'].str.lower(), col5=df['col2'].str.len())
.sort_values(['col4', 'col5', 'col3'])
.drop(['col4', 'col5'], axis=1)
)
out
보다 세련된 방법은 sort_values 함수에 매개변수 key로 정렬용 함수를 전달하는 것인데, 결국 sort_values의 key에 열마다 다른 함수를 적용해야 합니다.
매개변수 key에 열마다 다른 함수를 전달하는 방법은 아래와 같습니다.
def sorter(x):
return {
'col1': lambda s: s.str.lower(),
'col2': lambda s: s.str.len()
}.get(x.name, lambda s: s)(x)
out = df.sort_values(['col1', 'col2', 'col3'], key=sorter)
out:
위 코드를 딕셔너리로 풀어 쓰면 다음과 같습니다.
m = {'col1': lambda s: s.str.lower(), 'col2': lambda s: s.str.len()}
out = df.sort_values(['col1', 'col2', 'col3'], key=lambda x: m.get(x.name, lambda s: s)(x))
교보문고 구매 페이지, 알라딘 구매 페이지, yes24 구매 페이지
'판다스 > 판다스 팁' 카테고리의 다른 글
[pandas] 그룹의 순서를 유지하고 그룹 내에서 정렬하기 (0) | 2024.05.13 |
---|---|
[pandas] 날짜가 속한 분기의 마지막 날 구하기 (0) | 2024.03.30 |
[pandas] AAA → AA → A → BBB순으로 정렬하기 (0) | 2024.03.28 |
[pandas] 특정 대상만 끌어 올려 정렬하기 (0) | 2024.03.28 |
[pandas] 정해진 임의 순서로 정렬 하기 (0) | 2024.03.28 |