/ DATA-SCIENCE

Python 데이터분석 라이브러리(9) - Pandas(DataFrame Grouping)

Data-Science 강의는 여러 절로 구성되어 있습니다.


Series Grouping


# Series Grouping

import numpy as np
import pandas as pd

df = pd.DataFrame({ "학과" : ["컴퓨터","체육교육과","컴퓨터","체육교육과","컴퓨터"],
                    "학년" : [1, 2, 3, 2, 3],
                    "이름" : ["홍길동","김연아","최길동","아이유","신사임당"],
                    "학점" : [1.5, 4.4, 3.7, 4.5, 3.8]})
display(df)

# 학과에 학년에 중복된 값이 있다.
# 학과를 기준으로 grouping작업
dept = df["학점"].groupby(df["학과"])  
display(dept)    # <pandas.core.groupby.generic.SeriesGroupBy object at ~ >

# 그룹 안에 데이터를 확인하고 싶은 경우에는 get_group() 사용
print(dept.get_group('컴퓨터'))   # Series로 리턴

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

# 각 그룹의 평균을 알고 싶은 경우
print(dept.mean())

print("="*30)

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

# unstack을 이용하여 최하위 index를 column으로 설정
display(dept_year.mean().unstack())


DataFrame Grouping


# DataFrame Grouping

import numpy as np
import pandas as pd

df = pd.DataFrame({ "학과" : ["컴퓨터","체육교육과","컴퓨터","체육교육과","컴퓨터"],
                    "학년" : [1, 2, 3, 2, 3],
                    "이름" : ["홍길동","김연아","최길동","아이유","신사임당"],
                    "학점" : [1.5, 4.4, 3.7, 4.5, 3.8]})
display(df)

# 학과에 학년에 중복된 값이 있다.
# 학과를 기준으로 grouping작업
df_group_dept = df.groupby(df["학과"])  
display(df_group_dept)    # <pandas.core.groupby.generic.DataFrameGroupBy object at ~ >

# 그룹 안에 데이터를 확인하고 싶은 경우에는 get_group() 사용
display(df_group_dept.get_group('컴퓨터'))   # DataFrame으로 리턴

# 각 그룹의 사이즈를 확인하고 싶은 경우에는 size() 사용
print(df_group_dept.size())  # Series로 리턴             

# 각 그룹의 평균을 알고 싶은 경우
display(df_group_dept.mean())

print("="*30)

# 2단계 grouping
df_dept_year = df.groupby(["학과","학년"])
display(df_dept_year.mean())

# unstack을 이용하여 최하위 index를 column으로 설정
display(df_dept_year.mean().unstack())


DataFrame 다양한 Grouping


# DataFrame 다양한 Grouping

import numpy as np
import pandas as pd

df = pd.DataFrame({ "학과" : ["컴퓨터","체육교육과","컴퓨터","체육교육과","컴퓨터"],
                    "학년" : [1,2,3,2,3],
                    "이름" : ["홍길동","김연아","최길동","아이유","신사임당"],
                    "학점" : [1.5, 4.4, 3.7, 4.5, 3.8]})
display(df)

# 학과별 평균학점은?
# print(df["학점"].groupby(df["학과"]).mean())

# 학과별 평균학점의 다른 표현
# print(df.groupby(df["학과"])["학점"].mean())

# 학과, 학년별 평균 학점은?
# display(df.groupby([df["학과"],df["학년"]]).mean())
# display(df.groupby(["학과","학년"]).mean())

# 학과별 몇명이 존재하는가?
# print(df.groupby(df["학과"])["이름"].count())


DataFrame Grouping과 반복문


import numpy as np
import pandas as pd

df = pd.DataFrame({ "학과" : ["컴퓨터","체육교육과","컴퓨터","체육교육과","컴퓨터"],
                    "학년" : [1,2,3,2,3],
                    "이름" : ["홍길동","김연아","최길동","아이유","신사임당"],
                    "학점" : [1.5, 4.4, 3.7, 4.5, 3.8]})
display(df)

# 학과로 그룹핑한 후 for문을 이용한 반복 처리
for dept, group in df.groupby(df["학과"]):
    print("="*30)
    print(dept)
    display(group)

    
# 학과와 학년으로 Grouping한 후 for문을 이용한 반복 처리
for (dept, year), group in df.groupby(["학과","학년"]):
    print("="*30)
    print(dept)
    print(year)
    display(group)



DataFrame Grouping 후 데이터 변환


import numpy as np
import pandas as pd

df = pd.DataFrame({ "학과" : ["컴퓨터","체육교육과","컴퓨터","체육교육과","컴퓨터"],
                    "학년" : [1,2,3,2,3],
                    "이름" : ["홍길동","김연아","최길동","아이유","신사임당"],
                    "학점" : [1.5, 4.4, 3.7, 4.5, 3.8]})
display(df)

# grouping한 내용을 list로 변환
myList = list(df.groupby(df["학과"]))  # tuple형태의 list가 생성(group명,DataFrame)
print(type(myList[0])) # <class 'tuple'>

print(myList[0][0]) # 체육교육과
print(type(myList[0][1])) # <class 'pandas.core.frame.DataFrame'>

###

my_list = [('홍길동',20), ('김길동',30), ('최길동',50)]
my_dict = dict(my_list)

print(my_dict)  # {'홍길동': 20, '김길동': 30, '최길동': 50}

myDict = dict(myList) 
print(myDict)

display(myDict["컴퓨터"])

End.


Data-Science 강좌는 아래의 책과 사이트를 참조했습니다. 조금 더 자세한 사항을 알고 싶으시면 해당 사이트를 방문하세요!!