pandas의 groupby 함수는 데이터프레임의 특정 변수를 기준으로 묶은 데이터프레임을 반환해줍니다.
pandas.DataFrame.groupby — pandas 1.3.4 documentation (pydata.org)
위의 데이터프레임에서 이름은 모든 값이 유니크하므로, groupby를 적용하더라도 동일한 모양의 데이터프레임이 반환됩니다. 하지만 나이, 학과의 경우 변수값이 겹치는 경우가 있습니다. groupby를 사용하기 적합합니다.
groupby는 이중, 삼중 이상으로도 사용할 수 있습니다. 이 경우에는 데이터프레임 이름이 df라면
df.groupby(['나이', '학과'])
와 같은 형태 (+뒤에 sum, mean 함수 등)로 사용할 수 있습니다. 우리의 데이터프레임에서 남은 변수는 '이름'인데, 이름의 경우 문자열이므로 mean을 적용할 수 없기 때문에 sum 함수를 사용해줍니다. 그 결과는 다음과 같습니다.
count 함수를 사용하면 다음과 같습니다.
그런데 만약 나이별로 통계/경영/지리/영문과 명 수를 모두 표기하고 싶다면? 20살 경영, 지리, 영문과가 0명인걸 표기하고 싶다면 어떻게 해야 할까요?!?!?!?
정답은 unstack(), stack()에 있습니다!
pandas.DataFrame.unstack — pandas 1.3.4 documentation (pydata.org)
unstack은 groupby로 묶여있던 변수를 다시 컬럼으로 만들어줍니다. 이 과정에서 해당 컬럼 값이 없는 경우, 0으로 채워준다는 의미의 'fill_value=0' 인자를 입력해줍니다. 다시 stack()을 해주면 컬럼을 다시 묶어줍니다.
정리하면 다음과 같습니다.
df.groupby(['나이', '학과']).count().unstack(fill_value=0).stack()
이렇게 하면 위의 테이블과 같은 모양의 데이터프레임을 만들 수 있습니다!
참고
python - Pandas groupby for zero values - Stack Overflow
'Computer > python' 카테고리의 다른 글
[seaborn] 예쁜 그래프를 만들 수 있는 커스텀 팔레트 만들기! (0) | 2022.01.05 |
---|---|
[python] 가상환경(Ubuntu)에서 matplotlib 한글폰트 사용하기 (0) | 2021.11.04 |
[Folium] Choropleth 지도 전부 검은색으로 뜰 때 해결법 + 미국 zip code별 GeoJSON 자료 (0) | 2021.09.21 |
[파이썬 오류] "TypeError 'xxx' object is not callable" 무슨 뜻? (0) | 2021.09.13 |
[백준] 10952 : while(1) 무한반복문 사용하기 (0) | 2021.09.12 |
댓글