21.07.19_데이터 프레임 groupby()

우니·2021년 7월 19일
0

판다스

목록 보기
1/2

데이터프레임?

열 형태로 만들어진 Series에 있는 데이터를 하나의 표의 구조로 만들어놓은 형태.
판다스를 활용하여 사용할 수 있으며 딕셔너리, 리스트, 튜플과 같은 여러가지 자료형을 이용할 수 있습니다.



그룹연산

  • 복잡한 데이터를 어떤 기준에 따라 여러 그룹으로 나누어 분할처리 하는 것
  • 그룹 연산은 데이터를 집계, 반환, 필터링 하는데 효율적
  • 사용법 : groupby() 메소드를 사용

groupby

하나의 컬럼을 기준으로 데이터를 집계, 요약 분석할 수 있습니다.
사용방법은 아래와 같습니다

DataFrame.groupby('columns')

타이타닉이라는 데이터프레임에서
나이로(age 컬럼) 그룹을 묶어서 결과를 보여줌

titanic.groupby('age')

타이타닉이라는 데이터프레임에서
객실등급(class 컬럼)으로 분류한 데이터를 보여줌

titanic.groupby(coulumns)


그룹지은 것 끼리 연산하기

1. 평균 / mean() 사용

타이타닉 데이터 프레임의 각 그룹 별 컬럼들의 평균을 구하세요
먼저 데이터 프레임을 class를 기준으로 groupby()합니다

grouped = df.groupby(['class])
print(grouped) 

#class는 예약어이기 때문에 level등으로 컬럼 이름을 바꿔서 사용하는 것을 추천합니다.

class를 기준으로 groupby()한 내용으로
평균값을 냅니다.

average = grouped.mean()
average

2.통계 정보 /describe() 사용

  1. 보려는 객체 리스트로 형변환

describe()를 사용하려면 리스트 형태여야 합니다.
따라서 먼저 list로 groupby 했던 객체를 리스트로 묶어줍니다

list(grouped)

2.describe 사용

  • 인덱스 위치 지정해서 보기

리스트로 묶은 그룹을
인덱싱을 통해 위치를 지정합니다

li = list(grouped) 
li[2][1].describe()
  • 인덱스 반환 후 loc 사용
a = grouped.groups['Third]
group3 = df.loc[a]
group3.describe()

  • get_group() 사용
group3 = grouped.get_group('Third')
group3.describe()
  • 2개 이상 컬럼 지정해서 describe 사용하기
grouped_two = df.groupby(['age','class'])
grouped_two.describe()

for key, group in grouped_two:
	print('*key:', key)
    print('*value :', group) 
    print(grouped_two.describe) 

지정한 행 안에 있는 값만 따로 추출하기

-Third에 있는 female의 정보만 보기

group3 = grouped_two.get_group(('Third', 'female'))
group3


추가로 groupby()를 활용하여
할 수 있는 연산을 알아봅시다.

적용 - 결합

데이터 집계 (aggregation agg)

  • agg는 groupby()한 오브젝트를 집계 연산을 처리 할 수 있다
  • 사용 방법 :group 객체.agg([함수1, 함수2...])

변환(transform)

  • 값의 원래 인덱스와 컬럼 이름을 기준으로 연산한 결과를 보여줌
  • 사용 방법 : group객체.transform(매핑함수)

필터링(filter)

  • filter는 조건에 맞는 값만 남긴다
  • 사용 방법 : group객체.filter(조건함수식)

값에 개별적으로 함수 적용하는 apply

  • 판다스의 각각의 값을 특정 함수로 1:1 매칭
  • 사용자가 원하는 대부분 연산을 그룹 객체에 적용 (모든 값이 적용대상이 됨)
  • 사용 방법 : group객체.apply(매칭시키려는 함수)


agg 문제

agg를 사용해서 최대값에서 최소값을 빼는 함수를 만드세요

def z(x):
	return x.max - x.min
    
 y = grouped.agg(z)
 display(y.head())
 

filter 문제

데이터 개수가 200개 이상은 그룹만을 필터링 하여 데이터 프레임으로 반환하여 grouped_filter이름으로 저장 후 처음 5개 행을 출력하세요

그룹에 조건을 적용 시키는 filter함수를 활용합니다.
사용법 : group객체.filter(조건함수식)



grouped = df.groupby('class')
x = grouped.filter(lambda x: x >= 200) 
print(x.head()) 

profile
데이터와 머신러닝을 배우는 일본사업 마케터입니다

0개의 댓글