Group by

2023. 3. 12. 11:02· AI/Pandas

- sql 의 group by 와 같다! 

 

df.groupby("Team")["Points"].sum()

위의 결과는 Team들의 Points들의 합을 반환한다.

df.groupby(["Tema","Year"])["Points"].sum()

여러 Column들을 groupby 할 수도 있다.

 

Groupby 한 결과물은 multilevel index를 가진다.

>>> sum_wegiht = grouped["Weight"].sum()
>>> sum_wegiht


Animal  Age
Cat     2      10
        4      15
        6      12
Dog     1      30
        3      25
        5      20
Name: Weight, dtype: int64

>>> sum_wegiht.index
MultiIndex([('Cat', 2),
            ('Cat', 4),
            ('Cat', 6),
            ('Dog', 1),
            ('Dog', 3),
            ('Dog', 5)],
           names=['Animal', 'Age'])


>>> type(sum_wegiht)
<class 'pandas.core.series.Series'>

이 때 결과물의 타입은 Series 타입이다.

 

unstack()

 

  Pandas에서 unstack() 함수는 Hierarchical index를 가진 데이터를 피벗 테이블 형태로 변환하는 함수입니다. 즉, 열 인덱스의 마지막 레벨을 행 인덱스로 이동시킵니다. 이를 통해 데이터를 다차원 배열 형태로 쉽게 확인할 수 있습니다.

 

>>> sum_wegiht.unstack()        

Age        1     2     3     4     5     6 
Animal                                     
Cat      NaN  10.0   NaN  15.0   NaN  12.0 
Dog     30.0   NaN  25.0   NaN  20.0   NaN 


>>> type(sum_wegiht.unstack())             
<class 'pandas.core.frame.DataFrame'>

 

swaplevel 함수

 

  Pandas에서 swaplevel() 함수는 Hierarchical index를 가진 데이터프레임에서 레벨을 바꿀 수 있는 함수입니다. 즉, 인덱스 레벨을 서로 교환할 수 있습니다. 이를 통해 데이터를 다양한 형태로 확인할 수 있습니다.

 

>>> sum_wegiht.swaplevel()


Age  Animal
2    Cat       10
4    Cat       15
6    Cat       12
1    Dog       30
3    Dog       25
5    Dog       20
Name: Weight, dtype: int64

 

 

reset_index()

 

>>> sum_wegiht.reset_index()

  Animal  Age  Weight
0    Cat    2      10
1    Cat    4      15
2    Cat    6      12
3    Dog    1      30
4    Dog    3      25
5    Dog    5      20

인덱스를 다시 풀어준다.

 

요약

df.groupby([column]) column 기준으로 group으로 묶어준다.
여기서의 df는 모두 Hierarchical Index를 가진 data를 말한다.
df.unstack() pivot table로 변환해준다.
df.swaplevel()  level을 서로 바꾼다.
df.sort_index(level = 1) 레벨 인덱스를 기준으로 데이터프레임 정렬한다.
df.sort_values() value값 기준으로 정
df.reset_index() index를 다시 만들어준다.
ss.sum(level = 0) series기 때문에 함수사용가능, Index level 기준으로 기본연산 수행가능

groupby는 Split상태에서 추출이 가능하다.

grouped = df.groupby("Animal")

for name, group in grouped:
    print(name)
    print(group)


Cat
  Animal  Age  Weight
2    Cat    2      10
3    Cat    4      15
5    Cat    6      12
Dog
  Animal  Age  Weight
0    Dog    3      25
1    Dog    5      20
4    Dog    1      30

 

get_group

>>> grouped.get_group("Cat")

  Animal  Age  Weight
2    Cat    2      10
3    Cat    4      15
5    Cat    6      12

group 객체에서 해당 그룹의 정보를 가져온다. 위에서는 Cat의 정보를 가져왔다.

 

 

Aggregation -> 요약된 추출정보를 추출해준다.

data = {'Animal': ['Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Cat'],
    'Age': [3, 2, 5, 4, 1, 6],                           
    'Weight': [25, 10, 20, 15, 30, 12]}  
    
df = pd.DataFrame(data)                                      
grouped = df.groupby('Animal')                               
result = grouped.agg({'Age': 'mean', 'Weight': 'mean'})      

>>>result                                                       
        Age     Weight                                           
Animal                                                           
Cat     4.0  12.333333                                           
Dog     3.0  25.000000

마찬가지로 group객체에서 사용가능하다. 여러개의 합산정보를 가져올 수 있다. 위의 코드는 합과 평균을 반환하는 코드이다.

 

 

 

Transformation

 

transform() 메서드는 GroupBy 객체와 함께 사용되어, 그룹화된 데이터에 대해 각 그룹별로 적용된 결과를 반환합니다.

 

transform() 메서드는 apply() 메서드와 유사하게 동작하지만, 반환되는 객체의 형태가 다릅니다. apply() 메서드는 원본 DataFrame의 모양과 크기를 그대로 유지하지만, transform() 메서드는 각 그룹 내에서 계산된 결과를 그룹의 크기와 같은 형태로 반환합니다.

 

grouped = df.groupby('Animal')
result = grouped.transform('mean')

print(result)

   Age  Weight
0  3.0    25.0
1  4.0    12.3
2  3.0    25.0
3  4.0    12.3
4  3.0    25.0
5  4.0    12.3

  transform() 메서드를 사용하여 GroupBy 객체에서 각 그룹에서 계산된 값을 반환할 수 있습니다. 반환되는 객체의 형태는 그룹의 크기와 같으며, apply() 메서드와 달리 각 그룹에서 계산된 값을 원본 DataFrame과 같은 위치에 배치합니다.

 

Filter

 

  이 메서드는 GroupBy 객체와 함께 사용되어, 각 그룹에서 조건에 따라 특정 데이터를 선택하여 반환합니다.

 

  filter() 메서드는 조건 함수를 사용하여 각 그룹의 데이터를 필터링합니다. 조건 함수는 불리언 값을 반환하며, 그룹의 데이터 중에서 조건이 참인 데이터만 선택하여 반환합니다.

grouped = df.groupby('Animal')
result = grouped.filter(lambda x: x['Age'].mean() > 3)

print(result)

  Animal  Age  Weight
2    Dog    5      20
5    Cat    6      12
group.get_group 그룹의 정보를 가져온다.
group.agg() 요약된 추출정보 제공
group.transform(function) 데이터 변환
group.filter(function) function에 맞는 값들 filtering 해서 보여줌.

 

'AI > Pandas' 카테고리의 다른 글

Merge & Concat, persistence  (0) 2023.03.12
Pivot table, Crosstab  (1) 2023.03.12
map, replace, apply, built-in 함수들  (0) 2023.03.12
Series, Dataframe 생성, indexing, selection  (0) 2023.03.12
'AI/Pandas' 카테고리의 다른 글
  • Merge & Concat, persistence
  • Pivot table, Crosstab
  • map, replace, apply, built-in 함수들
  • Series, Dataframe 생성, indexing, selection
LTSGOD
LTSGOD
LTSGOD
TS's log
LTSGOD
전체
오늘
어제
  • 분류 전체보기 (138)
    • 언어 공부 (18)
      • C++ (6)
      • Python (12)
    • AI (39)
      • Numpy (2)
      • Pandas (5)
      • Pytorch (11)
      • Deep Learning (9)
      • CV (11)
      • 과제에서 얻은 것 (1)
    • 수학 (17)
      • 확률론 (8)
      • AI Math (9)
    • Spring (24)
      • 스프링입문 (8)
      • 스프링 원리 - 기본편 (5)
      • 스프링부트와 AWS로 혼자구현하는 웹 서비스 (10)
      • JPA (1)
      • spring MVC (0)
    • CS 기본 (25)
      • 네트워크 (5)
      • OS (4)
      • 자료구조 (9)
      • DB (7)
    • Git (2)
    • 백준 (1)
    • 활동 (8)
      • 2023 겨울 (1)
      • 네이버 부스트캠프 AI Tech (7)
    • HTML,CSS (2)
    • 도커 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 회고
  • 후기
  • AWS
  • Camper
  • 부스트캠프
  • AI
  • BOOSTCAMP
  • 붓캠
  • pytorch
  • AI Tech 5기
  • 5기

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LTSGOD
Group by
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.