일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- NLP
- word2vec
- HIVE
- 주가예측
- Deeplearning
- 데이터처리
- ggplot
- lstm
- 그래프
- R그래프
- 딥러닝
- 데이터시각화
- 자연어처리
- CNN
- r
- R시각화
- 머신러닝
- 데이터
- SQL
- 하둡
- 기계학습
- R프로그래밍
- AI
- Python
- Hadoop
- 그래프시각화
- pandas
- 빅데이터
- 빅데이터처리
- 데이터분석
- Today
- Total
욱이의 냉철한 공부
[Python, 정리] Pandas - 데이터 그룹연산 본문
1. GroupBy
=> 그룹연산 : Split 분리 - Apply 적용 - Combine 결합
그룹의 색인은 다양한 형태가 될 수 있으며, 모두 같은 타입일 필요도 없다.
. 그룹으로 묶을 축과 같은 길이의 리스트나 배열
. DataFrame의 칼럼 이름을 지칭하는 값
. 그룹으로 묶을 값과 그룹 이름에 대응하는 사전이나 Series 객체
. 축 색인 혹은 색인 내의 개별 이름에 대해 실행되는 함수
df = DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
'key2' : ['one', 'two', 'one', 'two', 'one'],
'data1' : np.random.randn(5),
'data2' : np.random.randn(5)})
1.
grouped = df['data1'].groupby(df['key1'])
grouped.mean()
2.
means = df['data1'].groupby([df['key1'], df['key2']]).mean()
means
3.
states = np.array(['Ohio', 'California', 'California', 'Ohio', 'Ohio'])
years = np.array([2005, 2005, 2006, 2005, 2006])
df['data1'].groupby([states, years]).mean()
4.
df.groupby('key1').mean() : key2는 숫자데이터가 아니기 때문에 결과에서 제외
df.groupby(['key1', 'key2']).mean()
df.groupby(['key1', 'key2']).size()
2. GroupBy - 그룹 간 순회하기
- 그룹 이름과 그에 따른 데이터 묶음을 튜플로 반환한다.
1.
for name, group in df.groupby('key1'):
print(name)
print(group)
2.
for (k1, k2), group in df.groupby(['key1', 'key2']):
print((k1, k2))
print(group)
3. 사전형으로 바꿔서 인덱싱 할 수 있다.
pieces = dict(list(df.groupby('key1')))
pieces['b']
4.
grouped = df.groupby(df.dtypes, axis=1)
dict(list(grouped))
3. GroupBy - 색인 : 칼럼 또는 칼럼의 일부만 선택하기.
- df[['data2']].groupby([df['key1'],df['key2']]).mean()
- df.groupby(['key1', 'key2'])[['data2']].mean() : 포맷이 데이터프레임이다.
- s_grouped = df.groupby(['key1', 'key2'])['data2'] : 포맷이 시리즈이다.
s_grouped.mean()
4. GroupBy - 색인 : 사전과 Series에서 묶기.
- 사전
people = DataFrame(np.random.randn(5, 5), columns=['a', 'b', 'c', 'd', 'e'], index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
people.ix[2:3, ['b', 'c']] = np.nan # Add a few NA values
mapping = {'a': 'red', 'b': 'red', 'c': 'blue', 'd': 'blue', 'e': 'red', 'f' : 'orange'}
by_column = people.groupby(mapping, axis=1)
by_column.sum()
- Series
map_series = Series(mapping)
people.groupby(map_series, axis=1).count()
5. GroupBy - 색인 : 함수로 묶기
-
people.groupby(len).sum()
-
key_list = ['one', 'one', 'one', 'two', 'two']
people.groupby([len, key_list]).min()
6. GroupBy - agg
=> 자신만의 데이터 집계 함수를 사용하려면 배열의 agg나 aggregate 메서드에 해당 함수를 넘기면 된다.
df = DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'], 'key2' : ['one', 'two', 'one', 'two', 'one'], 'data1' : np.random.randn(5), 'data2' : np.random.randn(5)})
1.
def peak_to_peak(arr):
return arr.max() - arr.min()
grouped = df.groupby('key1')
grouped.agg(peak_to_peak)
2.
grouped.describe()
7. GroupBy - 칼럼에 여러 가지 함수 적용하기
=> 칼럼에 따라 다른 함수를 사용해서 집계를 수행하거나 여러 개의 함수를 한 번에 적용
grouped = tips.groupby(['sex', 'smoker'])
1. 기본
grouped_pct = grouped['tip_pct']
grouped_pct.agg('mean')
2. 여러 개의 함수 하나의 칼럼에 적용
grouped_pct.agg(['mean', 'std', peak_to_peak])
3. 여러 개의 함수 하나의 칼럼에 적용 - 이름 바꾸기
grouped_pct.agg(['mean', 'std', peak_to_peak])
4. 여러 개의 함수 여러 칼럼에 적용
functions = ['count', 'mean', 'max']
result = grouped['tip_pct', 'total_bill'].agg(functions)
result
result['tip_pct']
5. 여러 개의 함수 여러 칼럼에 적용 - 이름 바꾸기
ftuples = [('Durchschnitt', 'mean'), ('Abweichung', np.var)]
grouped['tip_pct', 'total_bill'].agg(ftuples)
6. 여러 개의 함수 각 칼럼 마다 다르게 적용
=> 사전 이용
grouped.agg({'tip' : np.max, 'size' : 'sum'})
grouped.agg({'tip_pct' : ['min', 'max', 'mean', 'std'], 'size' : 'sum'})
7. 색인되지 않은 형태로 집계된 데이터 반환
tips.groupby(['sex', 'smoker'], as_index=False).mean()
=> as_index = False
8. GroupBy - 그룹별 연산 APPLY
=> 분리 - 적용 - 병합
=> 객체를 여러 조각으로 나누어 전달된 함수를 각 조각에 일괄적으로 적용한 후 이를 다시 합치게 된다.
def top(df, n=5, column='tip_pct'):
return df.sort_index(by=column)[-n:]
tips.groupby('smoker').apply(top)
tips.groupby(['smoker', 'day']).apply(top, n=1, column='total_bill')
-
tips.groupby('smoker', group_keys=False).apply(top)
=> gruoup_keys=False : 그룹 색인 생략하기
9. 피벗테이블 - GroupBy를 편리하게
1.
tips.pivot_table(index=['sex', 'smoker'])
2.
tips.pivot_table(['tip_pct', 'size'], index=['sex', 'day'], columns='smoker')
3. margins = True 는 합산값 구하기
tips.pivot_table(['tip_pct', 'size'], index=['sex', 'day'], columns='smoker', margins=True)
4. aggfunc=len 은 len 함수 적용하기, 디폴트는 mean이다
tips.pivot_table('tip_pct', index=['sex', 'smoker'], columns='day', aggfunc=len, margins=True)
5. fll_value = 0 비어 있는 곳은 0 집어 넣기.
tips.pivot_table('size', index=['time', 'sex', 'smoker'], columns='day', aggfunc='sum', fill_value=0)
'데이터분석 > Python : Basic' 카테고리의 다른 글
[Python, 정리] Pandas - 데이터 처리 (0) | 2022.03.28 |
---|---|
[Python] pandas 사용하기 (0) | 2022.03.28 |
[Python, 정리] Numpy 사용하기 (0) | 2022.03.28 |
[Python, 정리] 데이터 타입 이해하기 (0) | 2022.03.28 |