[Data Analysis] Ch9 데이터 수집과 그룹연산

fla1512·2023년 1월 30일
0

Python Study

목록 보기
1/6

본 게시물은 python for Data analysis 책을 참고하여 작성하였다.

9.1 Groupby

import numpy as np
import pandas as pd

df=pd.DataFrame({'key1':['a','a','b','b','a'],
             'key2':['one','two','one','two','one'],
             'data1': np.random.randn(5),
             'data2':np.random.rand(5)})
df
  • 데이터를 'key1', 'key2'로 묶고 각 그룹에서 data1의 평균 구하기
means=df['data1'].groupby([df['key1'], df['key2']]).mean()
means
means.unstack()
  • unstack:옆으로 펼친다

9.1.1 그룹 간 순회하기

for name, group in df.groupby('key1'):
    print(name)
    print(group)
for (k1,k2),group in df.groupby(['key1','key2']):
    print((k1,k2))
    print(group)

9.1.2 칼럼 또는 칼럼의 일부만 선택하기

df.groupby('key1')['data1']
df.groupby('key1')[['data1']]
# 1. 칼럼 이름으로 접근한 경우, 2. 칼럼 이름이 담긴 배열로 접근하기
# 둘의 차이
df.groupby(['key1','key2'])[['data2']].mean()
# 특정 열에 대해서만 평균을 구하고 싶은 경우

9.1.3 사전과 series에서 묶기

import numpy as np
import pandas as pd

people=pd.DataFrame(np.random.randn(5,5),
                   columns=['a','b','c','d','e'],
                   index=['Joe','Steve','Wes','Jin','Travis'])
people.loc[2:3,['b','c']]=np.nan # 특정 위치에 NaN 값 추가하기
people
mapping={'a':'Red','b':'Red','c':'Blue',
        'd':'Blue','e':'Red','f':'Orange'}
by_column=people.groupby(mapping, axis=1)
by_column.sum()

9.1.4 함수로 묶기

9.1.5 색인 단계로 묶기

columns = pd.MultiIndex.from_arrays([['US','US','US','JP','JP'],
                                    [1,3,5,1,3]], names=['cty','tenor'])
columns
hier_df = pd.DataFrame(np.random.randn(4,5), columns=columns)
hier_df
hier_df.groupby(level='cty', axis=1).count()

9.2 데이터 수집

9.2.1 칼럼에 여러 가지 함수 적용하기

grouped = tips.groupby(['day','smoker'])
grouped_pct = grouped['tip_pct']
grouped_pct.agg([('foo','mean'),('bar',np.std)])
# foo와 bar라는 이름으로 mean과 np.std가 계산됨

9.3.2 변위치 분석과 버킷 분석

frame = pd.DataFrame({'data1':np.random.randn(1000),
                     'data2':np.random.randn(1000)})
print(frame)
factor = pd.cut(frame.data1, 4)
factor
def get_stats(group):
    return {'min':group.min(), 'max':group.max(),
           'count':group.count(), 'mean':group.mean()}

grouped = frame.data2.groupby(factor)
grouped.apply(get_stats).unstack()

더 자세한 코드: https://github.com/jeonhyolim/python-study

0개의 댓글