[빅분기] groupby 후 loc나 iloc 적용 방법
.reset_index()의 역할은 현재의 인덱스를 기본 정수 인덱스로 되돌리고 기존 인덱스를 DataFrame의 열로 전환하는 것입니다. 이는 그룹화 및 집계 작업 후 원래의 인덱스였던 열을 다시 사용할 수 있게 합니다.
.reset_index()가 필요한 이유
- 그룹화 및 집계 후 인덱스 변화: df.groupby(['city', 'f2']).sum()을 수행하면, 'city'와 'f2' 열이 인덱스로 변환됩니다. 이 상태에서는 'city'와 'f2'는 더 이상 DataFrame의 열이 아니기 때문에, 직접 참조하기 어렵습니다.
- 정렬 후 행 참조: sort_values(by='views', ascending=False)로 정렬한 후에도 여전히 'city'와 'f2'는 인덱스로 남아 있습니다. 이 상태에서 특정 행을 참조할 때, 인덱스의 열 값을 직접 출력하기 위해서는 reset_index()가 필요합니다.
- 열로 변환: .reset_index()를 사용하면 'city'와 'f2'가 다시 DataFrame의 열로 변환되므로, iloc로 특정 행을 참조할 때, 해당 열 값을 직접 접근할 수 있습니다.
# 그룹화 및 합계 계산
grouped_df = df.groupby(['city', 'f2']).sum()
# 'views' 기준으로 내림차순 정렬
sorted_df = grouped_df.sort_values(by='views', ascending=False)
# 인덱스를 리셋하여 'city'와 'f2'를 다시 열로 변환
reset_df = sorted_df.reset_index()
# 3번째 행의 'city' 열 값 출력
third_city = reset_df.iloc[2]['city']
print(third_city)
위 과정을 통해, 'city'와 'f2'가 다시 DataFrame의 열로 변환되어 iloc을 사용해 특정 행의 'city' 값을 쉽게 참조할 수 있습니다.
.reset_index() 사용법 설명 및 예시
import pandas as pd
# 예시 데이터 생성
data = {
'city': ['Seoul', 'Busan', 'Seoul', 'Incheon', 'Busan', 'Incheon'],
'f2': ['A', 'B', 'A', 'B', 'A', 'B'],
'views': [100, 150, 200, 100, 300, 250]
}
df = pd.DataFrame(data)
단계별 설명
원본 데이터
print(df)
출력문
city | f2 | views |
Incheon | B | 350 |
Busan | A | 300 |
Seoul | A | 300 |
Busan | B | 150 |
그룹화 및 합계 계산
grouped_df = df.groupby(['city', 'f2']).sum()
print(grouped_df)
#출력문
아래와 같이 , city와 f2 순서로 그룹화된것을 볼 수 있습니다. sum()을 사용하여 그룹화한 열을 기준으로 views의 값을 확인할 수 있습니다.
이를 집계합이라고 합니다.
city | f2 | views |
Busan | A | 300 |
B | 150 | |
Incheon | B | 350 |
Seoul | A | 300 |
정렬
sorted_df = grouped_df.sort_values(by='views', ascending=False)
print(sorted_df)
.sort_values는 정렬 순서를 맞추는 함수입니다.
sql의 order by 절의 asc, desc와 ascending = True, False는 같은 역할을 합니다.
city | f2 | views |
Incheon | B | 350 |
Busan | A | 300 |
Seoul | A | 300 |
Busan | B | 150 |
여기까지는 기억이나면 쉽게 풀이하고 구성할 수 있는 영역입니다.
하지만, 특정 열이나 행을 출력하기 위해 그룹화한 data에서 iloc나 loc로 열 혹은 행의 기준으로 데이터를 뽑아내려면 .reset_index()를 해야합니다.
인덱스를 리셋하여 열로 변환
.reset_index()를 사용하여 인덱스를 기본 정수 인덱스로 되돌리고, 기존의 인덱스를 DataFrame의 열로 변환합니다.
reset_df = sorted_df.reset_index()
print(reset_df)
출력하면 아래와 같이 가장 왼쪽에 정수형 인덱스가 출력됩니다. 눈으로 보기에는 앞선 테이블과 달라보이지 않지만, 이제부터는 DataFrame의 열로 변하여 loc나 iloc를 쓸 수 있습니다.
city | f2 | views | |
0 | Incheon | B | 350 |
1 | Busan | A | 300 |
2 | Seoul | A | 300 |
3 | Busan | B | 150 |
3번째 행의 'city' 열 값 출력
third_city = reset_df.iloc[2]['city']
print(third_city)
출력 : Seoul
'빅데이터 분석기사' 카테고리의 다른 글
파이썬 데이터 타입 완전 정복 - 튜플, 리스트, 딕셔너리, 집합 (0) | 2024.02.03 |
---|---|
[빅분기] 데이터 이상치 찾기 IQR 확인 (0) | 2023.11.27 |
내가 보려고 만든 빅분기 꼭 알아야할 명령어 (0) | 2023.06.24 |
[빅데이터분석기사] 제 1유형 기출 파해치기 - 2 | 풀이 모음 | 여러 방식 | 핵심정리 (0) | 2023.06.22 |
[빅데이터분석기사] 제 1유형 기출 문제 파해치기 - 1 | 풀이 모음 | 여러 방식 | 핵심정리 (0) | 2023.06.21 |
댓글