Pandas GroupBy.agg()를 사용하여 동일한 열의 여러 집계 수행
groupby
함수는 데이터프레임을 하나 이상의 열 기준으로 그룹화하여 각 그룹에 대한 집계 연산을 수행할 수 있도록 합니다. agg
함수는 다양한 집계 함수를 제공하며, 여러 개의 집계 함수를 동시에 적용하여 원하는 통계량을 구할 수 있습니다.
동일한 열에 대해 여러 집계 함수를 적용하는 경우 agg
함수를 다음과 같이 사용할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대해 평균, 최소값, 최대값을 집계
result = df.groupby('C')['A'].agg(['mean', 'min', 'max'])
print(result)
위 코드는 'C' 열을 기준으로 데이터를 그룹화하고, 각 그룹에 대해 'A' 열의 평균, 최소값, 최대값을 구하여 새로운 데이터프레임으로 반환합니다.
여러 열에 대해 다양한 집계 함수를 적용하는 경우 딕셔너리를 사용하여 지정할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대해 평균, 최소값, 'B' 열에 대해 최대값을 집계
result = df.groupby('C').agg({'A': ['mean', 'min'], 'B': ['max']})
print(result)
사용자 정의 함수를 사용하여 집계를 수행することも 가능합니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대해 제곱 평균 계산
def squared_mean(series):
return (series**2).mean()
# 'A' 열에 대해 평균, 제곱 평균, 'B' 열에 대해 최대값을 집계
result = df.groupby('C').agg({'A': ['mean', squared_mean], 'B': ['max']})
print(result)
위 코드는 'C' 열을 기준으로 데이터를 그룹화하고, 각 그룹에 대해 'A' 열의 평균, 제곱 평균, 'B' 열의 최대값을 구하여 새로운 데이터프레임으로 반환합니다. squared_mean
함수는 사용자 정의 함수로서, 입력 시리즈의 제곱 평균을 계산합니다.
주의 사항:
agg
함수는 여러 열을 동시에 집계할 수 있지만, 각 열에 대해 적용할 함수는 딕셔너리 형태로 지정해야 합니다.- 사용자 정의 함수를 사용할 경우, 함수는 데이터프레임 또는 시리즈를 입력으로 받아야 합니다.
pandas groupby
와 agg
함수를 활용하면 데이터를 효율적으로 그룹화하고 다양한 집계 통계를 손쉽게 구할 수 있습니다.
- [Pandas
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대해 평균, 최소값, 최대값을 집계
result = df.groupby('C')['A'].agg(['mean', 'min', 'max'])
print(result)
A
: 1, 2, 3, 4, 5B
: 3, 4, 5, 6, 7C
: a, b, c, a, b
result = df.groupby('C')['A'].agg(['mean', 'min', 'max'])
: 이 코드는 다음을 수행합니다.df.groupby('C')
: 데이터프레임을 'C' 열을 기준으로 그룹화합니다. 이는 각 문자 'a', 'b', 'c'에 해당하는 데이터로 구성된 그룹을 만듭니다.['A']
: 'A' 열을 선택합니다. 이는 각 그룹에서 'A' 열의 값만 사용한다는 의미입니다..agg(['mean', 'min', 'max'])
: 'A' 열에 대해 평균, 최소값, 최대값을 집계합니다.
결과는 다음과 같습니다.
A mean min max
C
a 2.000000 1.000000 2.000000
b 4.000000 3.000000 5.000000
c 5.000000 5.000000 5.000000
이 예제에서는 groupby
와 agg
함수를 사용하여 데이터프레임을 'C' 열 기준으로 그룹화하고, 각 그룹에 대해 'A' 열의 평균, 최소값, 최대값을 집계했습니다.
이 외에도 다양한 집계 함수를 사용하거나 사용자 정의 함수를 만들어 원하는 통계량을 구할 수 있습니다.
추가 예제:
다음은 여러 열에 대해 다양한 집계 함수를 적용하는 방법입니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대해 평균, 최소값, 'B' 열에 대해 최대값을 집계
result = df.groupby('C').agg({'A': ['mean', 'min'], 'B': ['max']})
print(result)
이 코드는 다음과 같은 결과를 출력합니다.
A B mean min max
C
a 2.000000 3.000000 2.000000 1.000000 3.000000
b 4.000000 6.000000 4.000000 3.000000 6.000000
c 5.000000 7.000
Pandas groupby
와 agg
를 사용하지 않고 동일한 열의 여러 집계 수행하기
apply 함수 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대한 평균, 최소값, 최대값 계산
def g(df):
return pd.Series({'mean': df['A'].mean(), 'min': df['A'].min(), 'max': df['A'].max()})
result = df.groupby('C')['A'].apply(g)
print(result)
위 코드는 다음과 같이 작동합니다.
def g(df):
:df
라는 데이터프레임을 입력으로 받는 함수를 정의합니다.return pd.Series({'mean': df['A'].mean(), 'min': df['A'].min(), 'max': df['A'].max()})
:A
열의 평균, 최소값, 최대값을 계산하고, 결과를Series
객체로 반환합니다.result = df.groupby('C')['A'].apply(g)
:df
데이터프레임을 'C' 열 기준으로 그룹화하고, 'A' 열에 대해g
함수를 적용합니다. 이는 각 그룹에 대해g
함수를 호출하여 평균, 최소값, 최대값을 계산하고, 결과를 새로운 데이터프레임으로 반환합니다.
루프 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대한 평균, 최소값, 최대값 계산
result = pd.DataFrame()
for c in df['C'].unique():
df_group = df.loc[df['C'] == c]
result.loc[c] = {'mean': df_group['A'].mean(), 'min': df_group['A'].min(), 'max': df_group['A'].max()}
print(result)
for c in df['C'].unique()
: 'C' 열의 고유 값을 반복합니다.df_group = df.loc[df['C'] == c]
: 현재 반복 중인 'C' 값과 일치하는 행을 가진 새로운 데이터프레임df_group
을 만듭니다.result.loc[c] = {'mean': df_group['A'].mean(), 'min': df_group['A'].min(), 'max': df_group['A'].max()}
:result
데이터프레임에 현재 반복 중인 'C' 값을 인덱스로 하고, 'A' 열의 평균, 최소값, 최대값을 값으로 하는 새로운 행을 추가합니다.
melt 및 pivot_table 함수 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [3, 4, 5, 6, 7], 'C': ['a', 'b', 'c', 'a', 'b']})
# 'A' 열에 대한 평균, 최소값, 최대값 계산
df_melt = df.melt(id_vars='C')
result = df_melt.pivot_table(index='C', values='A', aggfunc={'A': ['mean', 'min', 'max']})
print(result)
df_melt = df.melt(id_vars='C')
:melt
함수를 사용하여 'C' 열을 제외한
python pandas dataframe