Pandas III¶
Groupby¶
- SQL groupby명령어와 같음
- split → apply → combine
- 과정을 거쳐 연산함
In [1]:
import pandas as pd
import numpy as np
In [2]:
# data from:
ipl_data = {
"Team": [
"Riders",
"Riders",
"Devils",
"Devils",
"Kings",
"kings",
"Kings",
"Kings",
"Riders",
"Royals",
"Royals",
"Riders",
],
"Rank": [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2],
"Year": [2014, 2015, 2014, 2015, 2014, 2015, 2016, 2017, 2016, 2014, 2015, 2017],
"Points": [876, 789, 863, 673, 741, 812, 756, 788, 694, 701, 804, 690],
}
df = pd.DataFrame(ipl_data)
In [3]:
df.groupby("Team")["Points"].sum()
Out[3]:
In [4]:
h_index = df.groupby(["Team", "Year"])["Points"].sum()
h_index
Out[4]:
- 한 개이상의 column을 묶을 수 있다.
In [5]:
h_index.index
Out[5]:
In [6]:
h_index["Devils":"Kings"]
Out[6]:
In [7]:
h_index.unstack()
Out[7]:
In [8]:
h_index.unstack().stack()
Out[8]:
- 여기서 다시
stack()
하면 다시 묶어준다.
In [9]:
h_index.reset_index()
Out[9]:
In [10]:
h_index.swaplevel()
Out[10]:
In [11]:
h_index.swaplevel().sort_index(level=1)
Out[11]:
- index를 sort하고 싶으면
sort_index
메서드를 사용한다.level
인자는 해당 인덱스의level
로 정렬한다.
In [12]:
h_index.sort_values()
Out[12]:
- value을 정렬하고 싶으면
sort_values()
사용한다.
In [13]:
h_index.std(level=0)
Out[13]:
In [14]:
h_index.sum(level=1)
Out[14]:
In [15]:
grouped = df.groupby("Team")
In [16]:
for name, group in grouped:
print(name)
print(group)
In [17]:
grouped.get_group('Devils')
Out[17]:
- 특정 group의 DataFrame을 가지고 오고 싶으면
get_group
을 사용하면 된다.
In [18]:
grouped.agg(max)
Out[18]:
In [19]:
grouped.agg(sum)
Out[19]:
In [20]:
grouped.agg(np.mean)
Out[20]:
- 인자로는 사용자 정의 함수를 넣을 수도 있다.
In [21]:
grouped['Points'].agg([np.sum,np.mean,np.std])
Out[21]:
- 특정 컬럼에 여러개의 function을 Apply할 수도 있다.
In [22]:
score = lambda x: (x - x.mean()) / x.std()
grouped.transform(score)
Out[22]:
- transform은 group별 컬럼단위로 인자 함수를 실행하여 개별 데이터에 적용시킨다. 위 코드는 group별로 정규화를 시켜주는 코드이다. (주의!!, 전체값을 정규화하는것이 아니라 group단위로 정규화 시켜준것)
In [23]:
score = lambda x: (x - x.min()) / (x.max() - x.min())
grouped.transform(score)
Out[23]:
In [24]:
df.groupby("Team").filter(lambda x: len(x) >= 3)
Out[24]:
- filter안에는 boolean 조건이 존재해야한다.
- 여기서 x로 들어오는 인자는 grouped된 DataFrame객체가 들어온다.
- len(x)는 grouped된 dataframe의 개수
In [25]:
df.groupby("Team").filter(lambda x: x["Points"].mean() > 700)
Out[25]:
'AI > 이론' 카테고리의 다른 글
matplotlib II (0) | 2021.01.29 |
---|---|
matplotlib I (0) | 2021.01.29 |
확률론 맛보기 (0) | 2021.01.28 |
Pandas IV (0) | 2021.01.28 |
딥러닝 학습방법 이해하기 (0) | 2021.01.27 |
Pandas II (0) | 2021.01.27 |
Pandas I (0) | 2021.01.27 |
경사하강법 II (0) | 2021.01.26 |