본문 바로가기
Data Analysis/SQL Pandas

[Pandas] Query Reference

by 베짱이28호 2024. 8. 29.

Pandas Query Practice Reference

 

1. 집계 함수 (Aggregate Functions)

1-1. 개수 / 합 / 곱 : count() / size() / sum() / prod()

df['col'].count() # NULL을 포함하지 않고 컬럼 수 반환.
df['col'].size() # NULL을 포함하고 컬럼 수 반환.
df['col'].sum() # 해당 컬럼의 합계 반환.
df['col'].prod() # 해당 컬럼의 곱 반환.
df['col'].unique() # 해당 컬럼의 고유한 값 반환.
df['col'].nunique() # 해당 컬럼의 고유한 값의 개수 반환.

1-2. 빈도 : mode() / value_counts()

df['col'].mode() # 해당 컬럼의 최빈값 반환.
df['col'].value_counts() # 해당 컬럼을 그룹화하고 NULL을 포함하지 않고 컬럼 수 반환. GROUP BY + COUNT와는 다르다!

1-3. 최대/최소 : min() / max()

  # 해당 컬럼에 NULL만 존재하는 경우 NULL을 반환.
 df['col'].min() # 해당 컬럼에서 최소값 반환.
 df['col'].max() # 해당 컬럼에서 최소값 반환.

1-4. 중심경향 : mean() / median()

df['col'].mean() # 해당 컬럼의 평균 반환.
df['col'].median() # 해당 컬럼의 중앙값 반환.

1-5. 산포도 : var() / std()

df['col'].var() # var() : 해당 컬럼의 분산 반환.
df['col'].std() # std() : 해당 컬럼의 표준편차 반환.

1-6. 상위,하위 : first() / last()

df['col'].first() # first() : 해당 컬럼의 첫 번째 값 반환.
df['col'].last() # last() : 해당 컬럼의 마지막 값 반환.
df['col'].head() # head(n) : 해당 컬럼의 상위 n개 반환.
df['col'].tail() # tail(n) : 해당 컬럼의 하위 n개 반환.

 

2. 윈도우 함수 (Window Functions)

2-1. 이동 평균/합계 : rolling(window=n) + mean()/sum()

df['mv_avg'] = df['col'].rolling(window=n).mean() # 현재 row 포함 n개 데이터 평균
df['mv_sum'] = df['col'].rolling(window=n).sum() # 현재 row 포함 n개 데이터 합
df['ema'] = df['col'].ewm(span=n, adjust=False).mean() # span은 가중치의 크기를 조정

2-2. 누적 합/곱/최대/최소/: cum + sum()/min()/min()/max()

df['cum_sum'] = df['col'].cumsum() # 해당 컬럼 누적합
df['cum_prod'] = df['col'].cumprod() # 해당 컬럼 누적곱
df['cum_max'] = df['col'].cummax() # 해당 컬럼 누적 최대값
df['cum_min'] = df['col'].cummin() # 해당 컬럼 누적 최소값
df[['mv_avg', 'mv_sum', 'mv_median']] = df['col'].rolling(window=n).agg(['mean', 'sum', 'median']) # agg를 통해 다중으로 처리 가능

2-3. 이동 : shift

df['lead'] = df['col'].shift(periods=-n) # 현재 행보다 n개 뒤에있는 행 (lead 컬럼이 n개 앞선다)
df['lag'] = df['col'].shift(periods=n) # 현재 행보다 n개 앞에있는 행 (lag 컬럼이 n개 늦는다)

2-4. 날짜별 집계

df['daily_mean'] = df['col'].resample('D').mean() # 날짜별 평균 
df['weekly_mean'] = df['col'].resample('W').mean() # 주별 평균
df['monthly_mean'] = df['col'].resample('M').mean() # 월별 평균
df['yearly_mean'] = df['col'].resample('Y').mean() # 연평균
monthly_agg = df.resample('M').agg(
            month_sum=('col', 'sum'),
            month_mean=('col', 'mean'),
            month_max=('col', 'max'),
            month_min=('col', 'min'))

3. 순위 (Rank)

3-1. 등수

df['rank_min'] = df['col'].rank(method='min', ascending=True) # 동점자 있으면 최소 등수 부여
df['rank_max'] = df['col'].rank(method='max', ascending=True) # 동점자 있으면 최대 등수 부여
df['rank_dense'] = df['col'].rank(method='dense', ascending=True) # 동점자 있으면 하나의 등수 처리
df['rank_first'] = df['col'].rank(method='first', ascending=True) # 동점자 있으면 row 순서대로 처리
df['col'].nlargest(n, keep='first') # first, last, all 존재. 동일 점수에 관한 row
df['col'].nsmallest(n, keep='first') # 먼저 나온사람, 나중에 나온사람, 모두

3-2. 퍼센티지

df['rank_percent'] = df['col'].rank(pct=True) 
df['qcuted'] = pd.qcut(df['col'], q=4, labels=range(1,5)) # 정렬 이후 사용하면 상 하위 그룹군으로 넘버링 가능. labels에 iterable 객체를 넣어서 새로운 컬럼에 할당한다.
quantiles = df['col'].quantile([i*0.1 for i in range(10)])

댓글