본문 바로가기
빅데이터 분석기사

[빅분기] groupby 후 .reset_index()의 역할

by 공불러 2024. 5. 24.
728x90
반응형

[빅분기] groupby 후 loc나 iloc 적용 방법

 

.reset_index()의 역할은 현재의 인덱스를 기본 정수 인덱스로 되돌리고 기존 인덱스를 DataFrame의 열로 전환하는 것입니다. 이는 그룹화 및 집계 작업 후 원래의 인덱스였던 열을 다시 사용할 수 있게 합니다.

.reset_index()가 필요한 이유

  1. 그룹화 및 집계 후 인덱스 변화: df.groupby(['city', 'f2']).sum()을 수행하면, 'city'와 'f2' 열이 인덱스로 변환됩니다. 이 상태에서는 'city'와 'f2'는 더 이상 DataFrame의 열이 아니기 때문에, 직접 참조하기 어렵습니다.
  2. 정렬 후 행 참조: sort_values(by='views', ascending=False)로 정렬한 후에도 여전히 'city'와 'f2'는 인덱스로 남아 있습니다. 이 상태에서 특정 행을 참조할 때, 인덱스의 열 값을 직접 출력하기 위해서는 reset_index()가 필요합니다.
  3. 열로 변환: .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

 

 

 

728x90
반응형

댓글