반응형
까먹으면 블로그 가서 다시 보려고 코드를 정리해두고자 합니다.
Pandas는 데이터를 전처리할 때, EDA를 할 때 자주 사용하는 패키지입니다. 그 중 자주 사용하는 함수가 Groupby인데요.
일반적으로 Groupby에 몇 가지 함수를 사용하거나, aggregate를 사용하여 컬럼마다 다른 함수, 또는 한 컬럼에 다수의 함수를 적용하는 데 사용하고 있습니다. 그냥 코드를 적으면 다음과 같이 사용할 수 있겠네요.
일반적으로 사용되는 groupby, groupby agg
# 일반적인 Groupby
data.groupby(['agg_column1','agg_column2'])['target_column1','target_column2'].mean()
# 자주 사용하는 Groupby
data.groupby(['agg_column1']).agg({'target_column1':['sum','mean'],
'target_column2':['count']})
그런데 가끔 그룹을 묶은 상황에서 여러 컬럼을 조합해서 함수를 만들고 싶을 때가 있습니다. 간단하게 apply를 적용하면 되긴 하지만 이럴 경우가 자주 없다보니 쓸때마다 까먹어서 이 포스트를 작성하게 되었습니다.
예를 들어 그룹별 가중평균을 구한다고 한다면 다음과 같은 함수를 만들고 apply를 적용할 수 있습니다.
groupby apply
def weight_mean(x):
d = {}
d['sum'] = x['weight'].sum()
d['weight_sum'] = (x['weight'] * x['target_value']).sum()
d['weight_mean'] = d['weight_sum'] / d['sum']
return pd.Series(d, index=['sum', 'weight_sum', 'weight_mean'])
data.groupby(group_list).apply(weight_mean)
추가로 가끔 그룹 별로 데이터의 갯수를 세야 할 때가 있는데요. null값을 포함할 지 여부에 따라 count, size를 골라서 사용하면 좋습니다. count는 널값이 없는 경우만을 카운팅하며, size의 경우 널값도 포함한 크기를 계산합니다.
추가 팁 : size, count
# 널값 제외
data.groupby(agg_list)['target'].count()
# 널값 포함
data.groupby(agg_list)['target'].size()
반응형