edwith_python_(7)groupby 와 pivot_table 사용하기
Updated:
edwith 부스트코스 파이썬으로 시작하는 데이터 사이언스 를 공부하는 과정입니다.
지난 포스트 edwith_python_(6)건강검진데이터 살펴보기
8.1 groupby
groupby를 통해 “성별코드”로 그룹화하여 “가입자일련번호” 값의 개수 카운팅
df.groupby(["성별코드"])["가입자일련번호"].count()
*결과*
성별코드
1 530410
2 469590
Name: 가입자일련번호, dtype: int64
꿀팁
함수에 대한 정보를 알고 싶을 때는 함수 뒤에 ? 를 입력하면 도움말을 볼 수 있다.
ex) df.groupby에 대한 정보를 얻고싶을 때 df.groupby? 입력
“성별코드”와 “음주여부”로 그룹화하여 개수 카운팅
df.groupby(["성별코드", "음주여부"])["가입자일련번호"].count()
*결과*
성별코드 음주여부
1 0.0 173612
1.0 356587
2 0.0 326827
1.0 142438
Name: 가입자일련번호, dtype: int64
“성별코드”와 “음주여부”로 그룹화하여 “감마지티피”의 평균 구하기
df.groupby([“성별코드”, “음주여부”])[“감마지티피”].mean()
*결과*
성별코드 음주여부
1 0.0 34.739868
1.0 56.610981
2 0.0 22.612408
1.0 25.001018
Name: 감마지티피, dtype: float64
“성별코드”와 “음주여부”로 그룹화하여 “감마지티피”의 요약수치 구하기
df.groupby(["성별코드", "음주여부"])["감마지티피"].describe()
*결과*
count | mean | std | min | 25% | 50% | 75% | max | ||
---|---|---|---|---|---|---|---|---|---|
성별코드 | 음주여부 | ||||||||
1 | 0.0 | 173604.0 | 34.739868 | 37.606197 | 1.0 | 18.0 | 25.0 | 38.0 | 999.0 |
1.0 | 356576.0 | 56.610981 | 68.851128 | 1.0 | 24.0 | 37.0 | 63.0 | 999.0 | |
2 | 0.0 | 326813.0 | 22.612408 | 25.203579 | 1.0 | 13.0 | 17.0 | 24.0 | 999.0 |
1.0 | 142429.0 | 25.001018 | 36.725100 | 1.0 | 13.0 | 17.0 | 25.0 | 999.0 |
agg를 사용하여 여러 수치를 한번에 나타내기
df.groupby(["성별코드", "음주여부"])["감마지티피"].agg(["count", "mean", "max"])
*결과*
count | mean | max | ||
---|---|---|---|---|
성별코드 | 음주여부 | |||
1 | 0.0 | 173604 | 34.739868 | 999.0 |
1.0 | 356576 | 56.610981 | 999.0 | |
2 | 0.0 | 326813 | 22.612408 | 999.0 |
1.0 | 142429 | 25.001018 | 999.0 |
max 값이 999.0 으로 동일한 것으로 보아, 어떤 의미가 있을 것으로 추정.
max값 때문에 mean값이 영향을 받아서 편향이 있을 것으로 생각됨 (중위값보다 높음)
agg : aggregation(뜻: 집합)의 약자
8.2 pivot_table
“음주여부”에 따른 그룹화된 수를 피봇테이블로 구하기
df.pivot_table(index="음주여부", values="가입자일련번호", aggfunc="count")
*결과*
가입자일련번호 | ||
---|---|---|
음주여부 | ||
0.0 | 500439 | |
1.0 | 499025 |
pivot: 연산을 하지 않고 데이터 형태만 바꾸고자할 때 사용
pivot_table: 연산을 하고자할 때 사용
“음주여부”에 따른 “감마지티피”의 평균 구하기
df.pivot_table(index="음주여부", values="감마지티피", aggfunc=["mean", "median", "describe"])
*결과*
mean | median | describe | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
감마지티피 | 감마지티피 | 25% | 50% | 75% | count | max | mean | min | std | |
음주여부 | ||||||||||
0.0 | 26.819650 | 19.0 | 14.0 | 19.0 | 29.0 | 500417.0 | 999.0 | 26.819650 | 1.0 | 30.639714 |
1.0 | 47.588675 | 30.0 | 18.0 | 30.0 | 52.0 | 499005.0 | 999.0 | 47.588675 | 1.0 | 63.056912 |
aggfunc를 생략하면 mean값으로 출력됨
pd.pivot_table(df, index=”음주여부”, values=”감마지티피, aggfunc=”mean”)과 같음
“성별코드”, “음주여부”에 따른 “감마지티피”의 평균 구하기
df.pivot_table(index=["성별코드", "음주여부"], values="감마지티피", aggfunc=["mean"])
Leave a comment