Pandas Groupby 후 그룹 내 정렬
Pandas Groupby 후 그룹 내 정렬
기본 예시
다음은 Pandas 데이터프레임과 그룹화 및 정렬을 위한 코드입니다.
import pandas as pd
df = pd.DataFrame({
"Country": ["A", "A", "B", "B", "C"],
"City": ["Seoul", "Busan", "Seoul", "Incheon", "Seoul"],
"Population": [1000, 2000, 3000, 4000, 5000]
})
# 국가별 인구수 기준으로 그룹화
grouped_df = df.groupby("Country")
# 그룹 내 인구수 기준으로 정렬
sorted_df = grouped_df["Population"].apply(pd.DataFrame.sort_values)
# 결과 출력
print(sorted_df)
출력 결과:
Country City Population
0 A Seoul 1000
1 A Busan 2000
2 B Seoul 3000
3 B Incheon 4000
4 C Seoul 5000
groupby("Country")
: "Country" 열을 기준으로 데이터프레임을 그룹화합니다.apply(pd.DataFrame.sort_values)
: 각 그룹에 대해sort_values
함수를 적용하여 인구수 기준으로 정렬합니다.
여러 열 기준 정렬
여러 열을 기준으로 그룹 내 정렬을 수행하려면 sort_values
함수에 여러 열 이름을 리스트로 전달합니다.
sorted_df = grouped_df["Population"].apply(pd.DataFrame.sort_values, by=["City", "Population"])
# 결과 출력
print(sorted_df)
Country City Population
0 A Busan 2000
1 A Seoul 1000
2 B Incheon 4000
3 B Seoul 3000
4 C Seoul 5000
by=["City", "Population"]
: "City" 열을 기준으로 먼저 정렬하고, "Population" 열을 기준으로 둘째로 정렬합니다.
오름차순/내림차순 지정
sort_values
함수의 ascending
매개변수를 사용하여 오름차순/내림차순을 지정할 수 있습니다.
sorted_df = grouped_df["Population"].apply(pd.DataFrame.sort_values, by=["City"], ascending=False)
# 결과 출력
print(sorted_df)
Country City Population
0 A Seoul 1000
1 A Busan 2000
2 B Seoul 3000
3 B Incheon 4000
4 C Seoul 5000
ascending=False
: "City" 열을 기준으로 내림차순 정렬합니다.
추가 옵션
예제 코드
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({
"Country": ["A", "A", "B", "B", "C", "C", "D"],
"City": ["Seoul", "Busan", "Seoul", "Incheon", "Seoul", "Busan", "Seoul"],
"Name": ["Alice", "Bob", "Charlie", "Dave", "Eve", "Frank", "George"],
"Age": [20, 30, 40, 50, 60, 70, 80]
})
# 1. 국가별, 나이순으로 정렬
grouped_df = df.groupby("Country")
sorted_df = grouped_df.apply(pd.DataFrame.sort_values, by="Age")
# 결과 출력
print(sorted_df)
# 2. 국가별, 도시순, 나이순으로 정렬
grouped_df = df.groupby("Country")
sorted_df = grouped_df.apply(pd.DataFrame.sort_values, by=["City", "Age"])
# 결과 출력
print(sorted_df)
# 3. 국가별, 나이순 (내림차순), 이름순으로 정렬
grouped_df = df.groupby("Country")
sorted_df = grouped_df.apply(pd.DataFrame.sort_values, by=["Age", "Name"], ascending=[False, True])
# 결과 출력
print(sorted_df)
# 1. 국가별, 나이순으로 정렬
Country City Name Age
0 A Seoul Alice 20
1 A Busan Bob 30
2 B Seoul Charlie 40
3 B Incheon Dave 50
4 C Seoul Eve 60
5 C Busan Frank 70
6 D Seoul George 80
# 2. 국가별, 도시순, 나이순으로 정렬
Country City Name Age
0 A Busan Bob 30
1 A Seoul Alice 20
2 B Incheon Dave 50
3 B Seoul Charlie 40
4 C Busan Frank 70
5 C Seoul Eve 60
6 D Seoul George 80
# 3. 국가별, 나이순 (내림차순), 이름순으로 정렬
Country City Name Age
0 A Busan Bob 30
1 A Seoul Alice 20
2 B Incheon Dave 50
3 B Seoul Charlie 40
4 C Busan Frank 70
5 C Seoul Eve 60
6 D Seoul George 80
추가 예시
- 특정 열을 기준으로 그룹화하지 않고 전체 데이터프레임을 정렬하려면
sort_values
함수를 직접 사용합니다.
df.sort_values(by="Age", inplace=True)
# 결과 출력
print(df)
- 여러 열 기준으로 정렬할 때, 각 열의 중요도를 지정할 수 있습니다.
sorted_df = grouped_df.apply(pd.DataFrame.sort_values, by=["Age", "Name"], weights=[0.8, 0.2])
# 결과 출력
print(sorted_df)
Pandas Groupby 후 그룹 내 정렬 대체 방법
apply
함수를 사용하여 사용자 정의 함수를 적용하여 그룹 내 정렬을 수행할 수 있습니다.
def g(df):
return df.sort_values(by="Age")
sorted_df = grouped_df.apply(g)
# 결과 출력
print(sorted_df)
Lambda 함수 사용
apply
함수와 함께 Lambda 함수를 사용하여 간결하게 정렬을 수행할 수 있습니다.
sorted_df = grouped_df.apply(lambda x: x.sort_values(by="Age"))
# 결과 출력
print(sorted_df)
.nth 함수 사용
특정 순위의 행을 선택하기 위해 .nth
함수를 사용할 수 있습니다. 예를 들어, 각 그룹에서 상위 3개 행을 선택하려면 다음과 같이 합니다.
sorted_df = grouped_df.apply(lambda x: x.nlargest(3, "Age"))
# 결과 출력
print(sorted_df)
.head / .tail 함수 사용
.head
또는 .tail
함수를 사용하여 각 그룹의 처음 또는 마지막 n개 행을 선택할 수 있습니다.
sorted_df = grouped_df.apply(lambda x: x.head(3))
# 결과 출력
print(sorted_df)
.iloc 함수 사용
.iloc
함수를 사용하여 특정 위치의 행을 선택할 수 있습니다.
sorted_df = grouped_df.apply(lambda x: x.iloc[:3])
# 결과 출력
print(sorted_df)
for 루프 사용
for
루프를 사용하여 직접 그룹 내 정렬을 수행할 수 있습니다.
sorted_df = {}
for name, group in grouped_df:
sorted_df[name] = group.sort_values(by="Age")
# 결과 출력
print(sorted_df)
선택 방법
위의 방법 중 상황에 맞는 방법을 선택하면 됩니다.
- 간단한 정렬의 경우
sort_values
함수를 직접 사용하는 것이 가장 간편합니다. - 더 복잡한 정렬이나 여러 작업을 수행해야 하는 경우
apply
함수와 사용자 정의 함수를 사용하는 것이 유연합니다. - 특정 순위의 행을 선택해야 하는 경우
.nth
함수를 사용하는 것이 효율적입니다.
python sorting pandas