• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

DataFrame Groupby 시 Aggregation 관련

22.06.14 16:01 작성 조회수 205

0

 
안녕하세요? 강의 잘 듣고 있습니다.
DataFrame Groupby 시 Aggregation 을 위해 dictionary 를 적용하는 경우, 동일한 key 값에 두 가지 function 을 할당하여 생기는 문제에 대한 해결책으로 named aggregation 을 사용하셨는데요, 리스트를 사용하는 것이 좀 더 간단하지 않을까요?
 
예)
agg_format = {'Age' : 'max', 'Age' : 'mean' , 'Fare' : 'mean' }
titanic_df.groupby('Pclass').agg(agg_format)
위와 같이 사용할 경우 'Age' 키값에 'max' 가 조회되지 않는 문제가 있지만,
agg_format = {'Age' : ['max' ,'mean'] , 'Fare' : 'mean' }
이와 같이 list를 value 값으로 주면 named aggregation 보다 코드가 간결해지며, display 시 max, mean 등 함수명이 column에 표기되므로 시각적으로도 더 나아 보입니다.
또한, 하나의 Aggregation 함수만 사용하는 경우에도, 아래와 같이 리스트를 사용하면 각 Column에 적용된 함수가 무엇인지 명시적으로 display 되게 할 수 있습니다.
agg_format = {'Age' : ['max' ] , 'Fare' : ['mean'] }
 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

말씀하신대로 group by 를 적용하면 더 직관적으로 적용될 수 있습니다. 

그런데 이 방법도 마찬가지로 번거로운 점이 있습니다. 바로 컬럼이 Multi Index로 만들어 진다는 점입니다.

agg_format = {'Age' : ['max' ,'mean'] , 'Fare' : 'mean' }

titanic_grp = titanic_df.groupby('Pclass').agg(agg_format)

print(titanic_grp.columns)

=> 

MultiIndex([( 'Age',  'max'),
            ( 'Age', 'mean'),
            ('Fare', 'mean')],
           )

Multi Index 컬럼으로 되면  컬럼을 바로 접근하기가 귀찮습니다.

물론 Multi Index에 익숙해 지면 상관없을 수 있지만, 그렇게 하기 위해서는 다시 Multi Index 강의를 만들어서 설명을 해야 합니다.  하지만 보통 Multi Index를 사용하는 경우는 그렇게 많지 않기 때문에 Group by 설명하자고 다시 Multi Index를 설명하는 것은 오히려 강의가 늘어진다고 생각합니다. 

Multi Index 컬럼을 다시 Single Index컬럼으로 만들수는 있습니다. 이 역시 추가적인 코딩이 필요합니다.

때문에 아예 Multi Index로 만들어 지는 Group by 사용법은 소개 드리지 않았습니다. 

좋은 의견 주셔서 감사합니다.