Pandas 그룹화 방법 groupby 및 집계 함수agg 관련

18996 단어
1. 그룹 by 함수 (a)는 열에 따라 그룹을 나눈다.
grouped_single = df.groupby('School')

그룹by 그룹을 나누면 그룹by 대상을 생성합니다. 이 대상은 아무것도 되돌려주지 않습니다. 상응하는 방법이 호출되어야만 작동합니다. 예를 들어 그룹을 꺼내는 것입니다.
grouped_single.get_group('S_1')

(b) 몇 열에 따라 조를 나눈다
grouped_single= df.groupby(['School','Class'])
grouped_single.get_group(('S_2','C_4'))

(c) 그룹 용량 및 그룹 수 확보
grouped_single.size()     # 
grouped_single.ngroups   # 

(d) 그룹의 스트리밍
for name,group in group_single:
print(name)
display(group.head(3))

(e) level 매개 변수 (다중 인덱스) 와 axis 매개 변수
df.set_index(['Gender','School']).groupby(level=1,axis=0).get_group('S_1')

2.group 대상의 특징(a)은 호출 가능한 방법dir() 함수에 파라미터가 없을 때 현재 범위 내의 변수, 방법과 정의된 유형 목록을 되돌려줍니다.매개 변수가 있는 매개 변수의 속성, 방법 목록
print([attr for attr in dir(grouped_single) if not attr.startswith('_')])

(b) 패리티 행에 따라 그룹화
df.groupby(lambda x:' ' if not df.index.get_loc(x)%2==1 else ' ').groups

(c) groupby의 [] 작업
df.groupby(['Gender','School'])['Math'].mean()>=60
df.groupby(['Gender','School'])[['Math','Height']].mean()
# 1 

(e) 연속형 변수 그룹
bins = [0,40,60,80,90,100]
cuts = pd.cut(df['Math'],bins=bins) # label 
df.groupby(cuts)['Math'].count()

2. 집합, 여과와 변환 1.집합 집합은 한 무더기의 수를 하나의 표량으로 바꾸는 것이기 때문에 mean/sum/size/count/std/var/sem/describe/first/last/nth/min/max는 모두 집합 함수(a)를 동시에 여러 개의 집합 함수를 사용합니다
group_m.agg(['sum','mean','std'])
#group_m math 
group_m.agg([('rename_sum','sum'),('rename_mean','mean')])# , sum, sum rename_sum
grouped_mul.agg({'Math':['mean','max'],'Height':'var'})# math 

(b) 사용자 정의 함수 사용
grouped_single['Math'].agg(lambda x:print(x.head(),' '))
# ,agg , 

2. 필터 그룹(필터 그룹) Filter 함수는 일부 그룹을 필터하는 데 사용되기 때문에 (결과가 그룹의 전체라는 것을 반드시 기억해야 한다) 전송된 값은 브리 표량이어야 한다.
grouped_single[['Math','Physics']].filter(lambda x:(x['Math']>32).all()).head()

# 그룹의 모든 math가 32보다 크다는 뜻이다. 3.변환transform 함수가 들어오는 대상은 그룹 내의 열입니다
grouped_single[['Math','Height']].transform(lambda x:x-x.min()).head()

같은 이치로 그룹 내 값을 표준화하고 값을 채우지 못한다
3. apply 함수 1.유연성, 수치, 목록, 데이터 상자 반환 가능(1)df[['School','Math','Height']].groupby('School').apply(lambda x:x.max())(2) 데이터 상자 반환 가능
df[['School','Math','Height']].groupby('School')\
    .apply(lambda x:pd.DataFrame({'col1':x['Math']-x['Math'].max(),
                                  'col2':x['Math']-x['Math'].min(),
                                  'col3':x['Height']-x['Height'].max(),
                                  'col4':x['Height']-x['Height'].min()})).head()

2. apply로 여러 가지 지표를 동시에 통계하면 OrderedDict 도구를 빌려 빠른 통계를 할 수 있다
from collections import OrderedDict
def f(df):
    data = OrderedDict()
    data['M_sum'] = df['Math'].sum()
    data['W_var'] = df['Weight'].var()
    data['H_mean'] = df['Height'].mean()
    return pd.Series(data)
grouped_single.apply(f)

좋은 웹페이지 즐겨찾기