Python 실습 | 데이터프레임 합치기(merge,concat), 컬럼명 변경(rename), 인덱스 재지정(reset_index), 집계(agg, mean, sum 등)

2025. 1. 15. 17:16·Python

< 선행커맨드 >

import seaborn as sns
import pandas as pd

문제 1.  

데이터 변형 - Iris 데이터셋을 활용하여 다음을 수행하세요:

  1. Iris 데이터셋을 불러옵니다.
  2. sepal_length가 평균보다 큰 데이터와 평균보다 작은 데이터를 각각 필터링하여 두 개의 데이터프레임을 만드세요.
  3. 새로운 열 category를 추가하여 각 행이 'above_average'인지 'below_average'인지 표시하세요.
  4. 위 두 데이터프레임을 concat을 사용하여 하나로 합칩니다. (category가 above_average인 데이터 프레임 → category가 below_average인 데이터프레임 순서)
  5. 최종 데이터프레임 concat_df의 50, 120번째 행을 출력하세요.
  • 조건 : concat을 사용할 때, ignore_index=True 옵션을 추가하여 인덱스를 재설정하세요.

skeleton code

# Iris 데이터셋 로드
iris = sns.load_dataset("iris")

"""
코드 입력
"""

# 최종 데이터프레임 출력
print(concat_df.iloc[50])
print(concat_df.iloc[120])

💡 문제 풀이 

`내 풀이`

# Iris 데이터셋 로드
iris = sns.load_dataset("iris")

# 평균 계산
iris_mean = iris['sepal_length'].mean()
# 평균보다 높은 데이터
df_a = iris[iris['sepal_length']>iris_mean]
df_a['category']='above_average'
# 평균보다 낮은 데이터
df_b = iris[iris['sepal_length']<iris_mean]
df_b['category']='below_average'
# 합산
concat_df = pd.concat([df_a,df_b],ignore_index=True)

# 최종 데이터프레임 출력
print(concat_df.iloc[50])
print(concat_df.iloc[120])

`실행 결과`


문제 2.  

Iris 데이터셋과 새로운 데이터프레임을 활용하여 다음을 수행하세요:

  1. Iris 데이터셋을 불러옵니다.
  2. species별 평균 petal_length와 평균 petal_width를 계산하여 새로운 데이터프레임 species_avg를 만드세요. reset_index()를 사용하여, index를 재지정하세요.
  3. 데이터프레임의 열 이름은 species, avg_petal_length, avg_petal_width로 지정합니다. species_avg와 원래의 Iris 데이터셋을 merge를 사용해 species를 기준으로 병합하세요.
  4. 최종 데이터프레임 merged_df의 10, 50, 120번째 행을 출력하세요.

힌트

  • groupby()와 mean()을 사용하여 그룹별 평균을 계산하세요.
  • merge에서 on 인자를 사용해 공통 열(species)을 기준으로 병합하세요.

skeleton code

# Iris 데이터셋 로드
iris = sns.load_dataset("iris")

"""
코드 입력
"""

# 결과 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])

💡 문제 풀이 

`내 풀이`

# Iris 데이터셋 로드
iris = sns.load_dataset("iris")

#speice별 평균 
species_avg = iris.groupby('species')[['petal_length','petal_width']].mean()
species_avg.reset_index(inplace=True)

#열 이름 변경
species_avg.rename(columns={'petal_length':'avg_petal_length'}, inplace=True) 
species_avg.rename(columns={'petal_width':'avg_petal_width'}, inplace=True) 

# species 기준으로 두 데이터 합치기
merged_df = pd.merge(iris, species_avg, on='species')

# 결과 출력
print(merged_df.iloc[10])
print(merged_df.iloc[50])
print(merged_df.iloc[120])

`실행 결과`


문제 3.  

데이터 집계 - Tips 데이터셋을 활용하여 다음을 수행하세요:

  1. Tips 데이터셋을 불러옵니다.
  2. 요일(day)과 시간(time)을 기준으로 그룹화하여 평균 팁(tip)과 총 금액(total_bill)을 계산하세요.
  3. 결과를 피벗 테이블로 변환하여 출력하세요.
    • 행은 day, 열은 time으로 설정하세요.

힌트 : groupby()와 pivot_table()을 활용하세요.

skeleton code

# Tips 데이터셋 로드
tips = sns.load_dataset("tips")

"""
코드 작성
"""

print(pivot_table)

💡 문제 풀이 

`내 풀이`

# Tips 데이터셋 로드
tips = sns.load_dataset("tips")

# agg를 쓰면 두 종류로 집계가 가능함
grouped = tips.groupby(['day','time']).agg({'tip':'mean','total_bill':'sum'})
grouped.reset_index(inplace=True)

# 피벗테이블
pivot_table = grouped.pivot_table(index='day',columns='time')
pivot_table

 

`오답노트`

  • .agg({'칼럼명':'집계종류'}) 사용하면, 여러 개 컬럼에 각기 다른 집계를 하게 할 수 있음! 예전에 이거 몰라서 각각 데이터프레임 만든 다음에 합쳤는데!

`실행 결과`

 

'Python' 카테고리의 다른 글
  • 통계 실습 | 파이썬으로 변동계수 구하기
  • 통계 공부 | 파이썬으로 정규분포, 이항분포 시각화(matplotlib subplot)
  • Python 실습 | 베이직 라이브세션 QCC 3회차
  • 통계 공부 | 가설검정의 주의점
초담
초담
4년차 마케터입니다
  • 초담
    그로스마케터의 기록
    초담
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (117)
      • Data Analytics Project (3)
      • SQL (55)
      • Python (43)
      • GA4 (0)
      • Tableau (8)
      • 아티클 스터디 (7)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
초담
Python 실습 | 데이터프레임 합치기(merge,concat), 컬럼명 변경(rename), 인덱스 재지정(reset_index), 집계(agg, mean, sum 등)
상단으로

티스토리툴바