pandas의 groupby 함수는 데이터프레임의 특정 변수를 기준으로 묶은 데이터프레임을 반환해줍니다.
pandas.DataFrame.groupby — pandas 1.3.4 documentation (pydata.org)
pandas.DataFrame.groupby — pandas 1.3.4 documentation
Used to determine the groups for the groupby. If by is a function, it’s called on each value of the object’s index. If a dict or Series is passed, the Series or dict VALUES will be used to determine the groups (the Series’ values are first aligned; s
pandas.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)
pandas.DataFrame.unstack — pandas 1.3.4 documentation
previous pandas.DataFrame.tz_localize
pandas.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
Pandas groupby for zero values
I have data like this in a csv file Symbol Action Year AAPL Buy 2001 AAPL Buy 2001 BAC Sell 2002 BAC Sell 2002 I am able to read it and groupby like this df.groupby(['
stackoverflow.com
'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 |
댓글