일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재귀함수
- 리스트
- DataFrame
- plt
- python
- pandas 메소드
- pandas
- 머신러닝
- SQL
- 문제풀이
- 조합
- MacOS
- 등차수열
- matplotlib
- tree.fit
- 기계학습
- 자료구조
- 파이썬
- 통계학
- INSERT
- 스터디노트
- Slicing
- 순열
- Machine Learning
- barh
- numpy
- maplotlib
- Folium
- pandas filter
- 등비수열
Archives
- Today
- Total
코딩하는 타코야끼
[Pandas] 4-1강_groupby 관련 메소드 본문
728x90
반응형
1. filter( )
- DataFrameGroupBy.filter(func, dropna=True, *args, **kwargs)
- 특정 조건을 만족하는 Group의 데이터(행)들을 조회할 때 사용한다. 주로 조건은 group별 집계결과를 이용한다.
- 함수에 group별 DataFrame을 argument로 전달한다.
- 함수는 받은 DataFrame을 이용해 집계한 값의 조건을 비교해서 반환한다.(반환타입: Bool)
- 반환값이 True인 Group들의 모든 행들로 구성된 DataFrame을 반환한다.
🌓 매개변수
- func: filtering 조건을 구현한 함수 객체
- 첫번째 매개변수로 Group으로 묶인 DataFrame을 받는다.
- bool type 값을 반환한다. 매개변수로 받은 DataFrame이 특정 조건을 만족하는지 여부를 반환한다.
- dropna=True
- 필터를 통과하지 못한 group의 DataFrame의 값들을 drop시킨다(기본값). False로 설정하면 NA 처리해서 반환한다.
- args, **kwargs: filter 함수의 두번째부터 선언된 매개변수에 전달할 argument 값들을 가변인자로 전달한다.
def check_mean(df):
"""
df - DataFrame. filter 에 사용하면 Group별 DataFrame이 넘어온다.
"""
return df['cnt1'].mean() >= 20
df.groupby('fruits').filter(check_mean)
- lambda 표현식 이용
df.groupby('fruits').filter(lambda df : df['cnt1'].mean() > 20)
#return 결과가 True인 group의 dataframe이 결과에 추가.
2. transform
- DataFrameGroupBy.transform(func, *args), SeriesGroupBy.transform(func, *args)
- 함수(func)에 열의 값들을 group 별로 전달 한다. 함수는 그 값을 받아 통계량을 구해 반환한다. 반환된 통계량으로 원래 값들을 변경한 Series를 반환한다. 여러 컬럼에 대해 처리할 경우 DataFrame을 반환한다.
- func: 함수객체
- 매개변수
- 그룹별 컬럼값들을 받을 변수 선언
- return
- 계산한 통계량.
- DataFrameGroupBy은 모든 컬럼의 값들을 group 별 Series로 전달한다.
- 매개변수
- args: 함수에 전달할 추가 인자값이 있으면 매개변수 순서에 맞게 값을 전달한다.
- transform() 함수를 groupby() 와 사용하면 컬럼의 각 원소들을 자신이 속한 그룹의 통계량으로 변환된 데이터셋을 생성할 수 있다.
- 컬럼의 값과 통계값을 비교해서 보거나 결측치 처리등에 사용할 수있다.
- 디테일하게 그룹별로 비교할때 사용한다.
📍 원본에 통계치 붙여서 비교하기
- DataFrameGroupby -> group별로 각 컬럼의 값을 함수에 전달.
- 사과->cnt1, 귤->cnt1, 사과-> cnt2, 귤->cnt2
result = df.groupby('fruits').transform('mean')
result
🌓 df.insert(삽입할 컬럼 순번, 컬럼이름, 값들) - 컬럼(열) 삽입
df.insert(1, "cnt1평균", result['cnt1'])
df
🌓 sample( ) - random하게 행 추출
df2.sample(n=3) # random하게 행을 추출해준다.
df2.sample(frac=0.3) # 비율 (전체중 30%의 행만 추출)
df2 = df2.sample(frac=1) # frac= 1.0 -> 섞기만 하겠다.
df2.reset_index(drop=True)
📍 filna( ) - 결측치 처리
- transform이용해서 결측치를 같은 과일별 평균값으로 변환
- 전체 평균보다 좀더 정확할 수 있다.
df3 = pd.DataFrame(data)
df3.loc[[0, 1, 5, 6, 10, 11, 15, 16], 'cnt2'] = np.nan
df3
cnt2_mean = df3['cnt2'].mean() # 93.5833333
df3['cnt2'] = df3['cnt2'].fillna(round(cnt2_mean)) #결측치가 채워짐
df
반응형
'[T.I.L] : Today I Learned > Pandas' 카테고리의 다른 글
[Pandas] 5강_Pandas_DataFrame_합치기 (0) | 2023.04.24 |
---|---|
[Pandas] 4-2강_pivot_table 및 일괄처리 메소드 (0) | 2023.04.19 |
[Pandas] 3강_Pandas 정렬 집계 (0) | 2023.04.18 |
[Pandas] 2-2강_Pandas DataFrame(행, 열의 값 조회 및 변경) (0) | 2023.04.13 |
[Pandas] 2-1강_Pandas DataFrame(메소드) (0) | 2023.04.13 |