반응형
지난 포스트에서 pandas groupby 함수의 동작 원리, split-apply-combine에 대해 알아봤습니다. 궁금한 점은 apply 단계에서 단 하나의 operation만 적용할 수 있는 것일까요? 그리고 구현된 mean, median, count 등의 함수 말고 우리가 따로 구현한 통계치는 어떻게 볼 수 있을까요? 이것은 GroupBy 객체에 .agg (aggregation) 메소드를 통해 실행할 수 있습니다.
지난 포스트와 같은 데이터를 이용해 state, gender에 대해 groupby를 수행하고 last_name, first_name, party 칼럼에 대해서 통계치를 보도록 하겠습니다.
grouped = df.groupby(['state', 'gender'])[['last_name', 'party']]
.agg 함수를 사용하려면 .agg 함수의 인자로 통계치를 전달합니다. 이때, 여러 통계치를 리스트나 튜플을 통해서 전달해서 둘 이상의 operation을 수행할 수 있습니다.
>>> grouped.agg(('first', 'last', 'count'))
last_name ... party
first last ... last count
state gender ...
AK F NaN NaN ... NaN 0
M Waskey Begich ... Democrat 14
AL F Graves Roby ... Republican 4
M Crowell Jones ... Democrat 205
AR F Oldfield Lincoln ... Democrat 5
... ... ... ... ...
WI M Martin Sensenbrenner ... Republican 198
WV F Kee Kee ... Democrat 1
M Blair Jenkins ... Republican 119
WY F Cubin Cubin ... Republican 1
M Nuckolls Enzi ... Republican 39
이때 column을 보면 MultiIndex 형태로 되는데, 다음과 같이 인덱싱하면 원하는 칼럼의 통계치를 선택적으로 볼 수 있고 .loc 메소드를 이용해서 행을 기준으로 인덱싱할 수 있습니다.
>>> grouped.agg(('first', 'last', 'count'))['party']
first last count
state gender
AK F NaN NaN 0
M Democrat Democrat 14
AL F Democrat Republican 4
M Republican Democrat 205
AR F Democrat Democrat 5
... ... ...
WI M Democrat Republican 198
WV F Democrat Democrat 1
M Unconditional Unionist Republican 119
WY F Republican Republican 1
M Democrat Republican 39
[116 rows x 3 columns]
>>> grouped.agg(('first', 'last', 'count'))['party', 'count']
state gender
AK F 0
M 14
AL F 4
M 205
AR F 5
...
WI M 198
WV F 1
M 119
WY F 1
M 39
Name: (party, count), Length: 116, dtype: int64
>>> grouped.agg(('first', 'last', 'count')).loc[('AK', 'M'), 'party']
first Democrat
last Democrat
count 14
Name: (AK, M), dtype: object
.agg() 메소드를 이용하면 칼럼 별로 서로 다른 통계치를 볼 수 있습니다. 이때, .agg() 메소드 인자로 각 칼럼 별 보고 싶은 통계치의 딕셔너리를 전달합니다.
>>> grouped = df.groupby(['state', 'gender'])
>>> grouped.agg({'last_name': 'count', 'party': ('first', 'count')})
last_name party
count first count
state gender
AK F 0 NaN 0
M 16 Democrat 14
AL F 4 Democrat 4
M 205 Republican 205
AR F 5 Democrat 5
... ... ...
WI M 198 Democrat 198
WV F 1 Democrat 1
M 119 Unconditional Unionist 119
WY F 1 Republican 1
M 39 Democrat 39
[116 rows x 3 columns]
반응형
'Computer > Pandas' 카테고리의 다른 글
Pandas groupby (3) (0) | 2021.08.14 |
---|---|
Pandas - SettingWithCopyWarning (0) | 2021.08.11 |
Pandas groupby (1) (0) | 2021.08.07 |
Pandas Categorical Data (0) | 2021.08.01 |
Onehot 인코딩의 역변환 (inverse transform) (0) | 2021.07.25 |