본문 바로가기
수업(국비지원)/Python

[Python] groupby : 컬럼으로 데이터 분리

by byeolsub 2023. 4. 25.

 

#groupby :컬럼으로 데이터 분리.
import seaborn as sns
titanic = sns.load_dataset("titanic")

 

📌

# class 컬럼으로 데이터 분할하기
# class 컬럼의 값으로 데이터를 분리 저장
# groupby(컬럼명) : 컬럼의 값. 그룹화된 DataFrame 객체
grouped = titanic.groupby("class")
grouped
for key,group in grouped :
# key : 분리된 컬럼값
# group : 분리된 DataFrame 객체 
    print("===key:",key,end=",") #class 컬럼의 값
    print("===cnt:",len(group),type(group)) #DataFrame 객체
    
titanic["class"].value_counts() #레코드별 갯수 파악

# 그룹별 평균
grouped.mean()
titanic.groupby("class").mean()
titanic.groupby("class").mean()

# 3등석에 해당하는 데이터만 조회하기
group3 = grouped.get_group("Third")
type(group3) # DataFrame객체
group3.info()

# class, sex 컬럼으로 데이터 분할하기
grouped2 = titanic.groupby(["class","sex"])
for key,group in grouped2 :
    print("===key:",key,end=",") 
    print("===cnt:",len(group),type(group))

# 3등석 여성정보만 group3f데이터에 저장하기
group3f = grouped2.get_group(('Third','female'))
group3f.info()
group3f[['class','sex']]

# class, sex 평균 구하기
grouped2.mean()
titanic.groupby(["class","sex"]).mean()

# class, sex 나이 평균 구하기
grouped2.age.mean()
grouped2.mean()["age"]# class, sex 평균 구하기
titanic.groupby(["class","sex"]).mean()["age"]

 

class, sex 평균 구하기
class, sex 나이 평균 구하기

# 클래스별 나이가 가장 많은 나이와 가장 적은 나이를 출력하기
titanic.groupby("class").max()["age"]
titanic.groupby("class").age.max()

titanic.groupby("class").min()["age"]
titanic.groupby("class").age.min()

grouped.max()["age"]
grouped.min()["age"]

# 클래스별 성별 나이가 가장 많은 나이와 가장 적은 나이를 출력하기
titanic.groupby(["class","sex"]).max()["age"]
grouped2.max()["age"]

titanic.groupby(["class","sex"]).min()["age"]
grouped2.min()["age"]


📌

# agg(함수이름) 함수 : 여러개의 함수를 여러개의 컬럼에 적용할 수 있는 함수
#                      사용자 정의함수 적용
def max_min(x) :
    return x.max() - x.min()

agg_maxmin = grouped.agg(max_min)
agg_maxmin

grouped.max() # 그룹에 있는 함수들의 최대값들
# agg() 함수 : 사용자가 정의한 함수를 나의 그룹 함수에 적용시킬 수 있는..
grouped.agg(max) # max도 하나의 함수이기때문에 agg()에 넣어도 괜찮다. 값은 위와 동일

# grouped 데이터에서 최대, 최소값 조회
grouped.agg(['max','min'])["age"] # 한번에 조회 가능
titanic.groupby("class").agg(['max','min'])["age"]

# 요금(fare) : 평균, 최대값, 나이(age) : 평균값
# class 별 요금 나이 정보 조회하기
grouped.agg({'fare':['mean','max'],'age':'mean'})
titanic.groupby("class").agg({'fare':['mean','max'],'age':'mean'})