[python] pandas DataFrame Index 초기화

2023. 2. 22. 10:33·Python/pandas

pandas의 iloc(loc) 메서드나 groupby 메서드를 사용하다보면 DataFrame의 특정 행마다 Index의 연속성이 끊어질 때가 있다.

 

특히 groupby 메서드로 그루핑한 뒤 각 그룹별로 Index를 새로 0 부터 만들고 싶을 때 reset_index 메서드를 사용하면 된다.

 

아래 코드는 과일 종류가 '사과', '포도', '배'가 있다고 가정할 때, 각각의 당도가 3, 3, 5인 DataFrame을 예시로 든다.

# col_0, col_1 을 각 컬럼으로 하는 DataFrame
df = pd.DataFrame({'과일': ['사과', '포도', '배'],
		   '당도': [3, 3, 5]})

결과

	과일	당도
0	사과	3
1	포도	3
2	배	5

 

위에서 만든 DataFrame(df)에서 '당도'를 기준으로 그루핑(groupby 메서드 사용)을 하고 '당도'를 key로 가지는 dictionary(=grouped_data)를 확인하면,

당도가 3에 해당하는 '사과'와 '포도'를 하나의 DataFrame으로 갖고, 당도가 5에 해당하는 '배'를 하나의 DataFrame으로 갖는 것을 확인할 수 있다.

# 당도를 기준으로 그루핑
grouped_data: dict = dict(list(df.groupby(['당도'])))

결과

# 각 value의 dtype은 DataFrame 이다.
{3:    과일  당도
     0  사과   3
     1  포도   3,
 5:   과일  당도
     2  배   5}

이 때, 그루핑된 DataFrame 을 확인해보면 '사과'와 '포도'가 있는 첫 번째 DataFrame은 Index가 0 부터 시작하는 반면, '배'만 있는 두 번째 DataFrame은 Index가 2 부터 시작한다.

 

이는 groupby 메서드에 의해 그루핑이 되면, Index는 iloc(loc) 메서드를 사용한 것과 같이 최초 생성한 DataFrame(df)의 Index를 사용하기 때문인데, 각 그룹별로 새로운 Index를 만들어야 할 때, 아래와 같이 reset_index 메서드를 사용한다. (reset_index 메서드를 사용할 때, 전달하는 인자인 drop은 default 로 False 이다.)

 

Index가 2부터 시작하는 당도가 5인 그룹을 확인해보자. (dtype이 dict인 grouped_data는 DataFrame을 value로 반환한다.)

# drop=False (default)
grouped_data[5].reset_index()  # 당도가 5인 그룹의 Index 초기화, drop=False

결과

	index	과일	당도
0	2	배	5

결과는 위와 같이 그루핑된 DataFrame에 새로운 Index를 생성한다.

 

따라서 새로운 Index를 생성하지 않도록 이번엔 drop=True 로 전달하자.

# drop=True
grouped_data[5].reset_index(drop=True)  # 당도가 5인 그룹의 Index 초기화, drop=True

결과

	과일	당도
0	배	5

이제 위의 결과처럼 당도가 5인 그룹의 Index는 0부터 시작한다.

'Python > pandas' 카테고리의 다른 글

[pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기  (1) 2023.05.08
[pandas] 두 개의 DataFrame을 SQL처럼 JOIN 하는 방법  (0) 2023.05.08
'Python/pandas' 카테고리의 다른 글
  • [pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기
  • [pandas] 두 개의 DataFrame을 SQL처럼 JOIN 하는 방법
옐리yelly
옐리yelly
전시회에서 도슨트를 따라다니며 작품 해설을 들으면 더 재밌었던 기억들이 있습니다. 글로 더 재밌는 개발이 되도록 노력하고 있습니다.
  • 옐리yelly
    개발 갤러리
    옐리yelly
  • 전체
    오늘
    어제
    • 모든 글 보기 (82)
      • Project (22)
      • Java (4)
      • Spring (6)
      • Kubernetes (6)
      • Docker (2)
      • JPA (2)
      • Querydsl (2)
      • MySQL (8)
      • ElasticSearch (7)
      • DevOps (4)
      • Message Broker (3)
      • Git & GitHub (2)
      • Svelte (1)
      • Python (8)
        • Python Distilled (4)
        • Anaconda (1)
        • Django (0)
        • pandas (3)
      • Algorithm (1)
      • Computer Science (0)
      • 내 생각 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    argocd
    nks
    JPA
    RabbitMQ
    커넥션 풀
    포텐데이
    예약 시스템
    elasticsearch
    dataframe
    Spring
    Message Broker
    Python
    docker
    OOP
    성능 테스트
    Project
    ncloud
    MySQL
    리팩토링
    svelte
    blue-green 배포
    비사이드
    pandas
    k8s
    데드락
    pymysql
    gitops
    프로젝트
    devops
    querydsl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
옐리yelly
[python] pandas DataFrame Index 초기화
상단으로

티스토리툴바