19 Groupby
| 9 Minute Read on Pandas
GroupBy¶
- 데이터베이스는 Group by절을 사용하여 Group으로 나눈후 집합(Group) 함수(count, avg, sum) 등을 사용할 수 있는데 Pandas에서도 이와 비슷한 개념인 Groupby 메소드가 존재함
Groupby Docs에 정의를 보면 매퍼에 의해 만들어진 Groupby 객체로 정의 됨(Group series using mapper (dict or key function, apply given function to group, return result as series) or by a series of columns.
- grouped = df.groupby['col1'] groupby메소드를 사용하여 groupby 객체가 생성되고.
- grouped.count(), grouped.mean(), grouped.sum()와 같이 생성된 groupby에서 집합함수를 적용할 수 있음.
groupby는 다음과 같은 iteration을 제공함
- for name, group in df.groupby()
In [2]:
import numpy as np
import pandas as pd
arrays = [['Arizona','Boston','Chicago','Detroit', 'Arizona','Boston','Chicago','Detroit']
,['First','First','First','First','Second','Second','Second','Second']]
index = pd.MultiIndex.from_arrays(arrays, names=('City','Season'))
columns = [2003, 2004, 2005]
#df = pd.DataFrame(np.random.randn(8, 3), index=index, columns = columns)
df = pd.DataFrame(np.arange(24).reshape((-1, 3)), index=index, columns = columns)
df
Out[2]:
In [4]:
# column을 기준으로 groupby
grouped = df.groupby(2004)
#-grouped.count(),
print(grouped.count())
#-grouped.mean(),
print((grouped.mean()))
# grouped.sum()
print(grouped.sum())
In [3]:
# index 중에 하나인 'Season' 기준으로 groupby
grouped = df.groupby('Season')
print(grouped.count())
(grouped.mean())
Out[3]:
In [4]:
# index의 array를 기준으로 groupby
grouped = df.groupby(['City','Season'])
print(grouped.count())
(grouped.mean())
Out[4]:
In [5]:
# groupby iteration
for name, group in df.groupby('City'):
print(name)
print(group)
In [6]:
# groupby iteration2
for (n1 ,n2), group in df.groupby(['City','Season']):
print(n1, n2)
print(group)
In [7]:
df
Out[7]:
In [8]:
#groupby후 DataFrame을 dictionary에 넣음
dic_group = dict(list(df.groupby('Season')))
In [9]:
dic_group
Out[9]:
In [10]:
# dictionary에 요소하나인 DataFrame을 조회
print(type(dic_group['First']))
dic_group['Second']
Out[10]: