티스토리 뷰

DataFrame Grouping

import numpy as np
import pandas as pd

my_dict = {'학과': ['컴퓨터', '체육교육과', '컴퓨터', '체육교육과', '컴퓨터'],
           '학년': [1, 2, 3, 2, 3],
           '이름': ['홍길동', '김연아', '최길동', '아이유', '신사임당'],
           '학점': [1.5, 4.4, 3.7, 4.5, 3.8]}

df = pd.DataFrame(my_dict)
display(df)

###########################################################

# 학과를 기준으로 grouping
# Series를 grouping하는 개념
dept = df['학점'].groupby(df['학과'])

display(dept) # pandas.core.groupby.generic.SeriesGroupBy object

# 그룹 안의 데이터를 확인하고 싶으면 get_group() 사용
print(dept.get_group('컴퓨터')) # Series

# 각 그룹의 사이즈를 확인하고 싶은 경우 size()
print(dept.size())  # Series로 리턴, 각 그룹의 count
print(dept.mean())  # Series로 리턴

# 2단계 grouping 간 grouping 가능
dept_year = df['학점'].groupby([df['학과'], df['학년']])
print(dept_year.mean())


# Series와 DataFrame은 index와 column에 multi index 개념을 지원
# unstack() : 최하위 index를 column()으로 설정
display(dept_year.mean().unstack())

 

DaraFrame을 grouping

import numpy as np
import pandas as pd

my_dict = {'학과': ['컴퓨터', '체육교육과', '컴퓨터', '체육교육과', '컴퓨터'],
           '학년': [1, 2, 3, 2, 3],
           '이름': ['홍길동', '김연아', '최길동', '아이유', '신사임당'],
           '학점': [1.5, 4.4, 3.7, 4.5, 3.8]}

df = pd.DataFrame(my_dict)
display(df)
####################################

# dept_year = df['학점'].groupby([df['학과'], df['학년']]) # Series
# DataFrame을 grouping한다.

df_group_dept = df.groupby(df['학과'])
print(df_group_dept) # pandas.core.groupby.generic.DataFrameGroupBy

display(df_group_dept.get_group('컴퓨터'))
display(df_group_dept.mean())

# dept_year = df['학점'].groupby([df['학과'],df['학년']])
df_dept_year = df.groupby(['학과','학년'])
display(df_dept_year.mean().unstack())

 

import numpy as np
import pandas as pd

my_dict = {'학과': ['컴퓨터', '체육교육과', '컴퓨터', '체육교육과', '컴퓨터'],
           '학년': [1, 2, 3, 2, 3],
           '이름': ['홍길동', '김연아', '최길동', '아이유', '신사임당'],
           '학점': [1.5, 4.4, 3.7, 4.5, 3.8]}

df = pd.DataFrame(my_dict)
display(df)
#######################
# 학과별 평균 학점은?
print(df['학점'].groupby(df['학과']).mean())

# 학과별 몇명이 존재하는가?
print(df['학점'].groupby(df['학과']).size())

 

Grouping으로, 해당 그룹 반복 처리

# 학과로 Grouping을 한 후 for문을 이용해서 반복처리.
# for (dept, group) in df.groupby(df['학과']):
#     print(dept)
#     display(group)
#     print("================")

for ((dept, year), group) in df.groupby(['학과', '학년']):
    print(dept)
    print(year)
    display(group)
    print("================")

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함