TLDR; Pandas groupby.agg
에는 (1) 여러 열에 대한 집계 및 (2) 열에 대한 여러 집계를 지정하기위한 새롭고 더 쉬운 구문이 있습니다. 따라서 pandas> = 0.25 에 대해 이렇게하려면
df.groupby('dummy').agg(Mean=('returns', 'mean'), Sum=('returns', 'sum'))
Mean Sum
dummy
1 0.036901 0.369012
또는
df.groupby('dummy')['returns'].agg(Mean='mean', Sum='sum')
Mean Sum
dummy
1 0.036901 0.369012
Pandas> = 0.25 : 명명 된 집계
Pandas는 GroupBy.agg
명명 된 집계를 지정하기위한보다 직관적 인 구문을 위해 의 동작을 변경했습니다 . 개선 사항 및 관련 GitHub 문제 GH18366 및 GH26512 에 대한 0.25 문서 섹션을 참조하십시오 .
문서에서
출력 열 이름을 제어하여 열별 집계를 지원하기 위해 pandas는에서 GroupBy.agg()
"명명 된 집계"라는 특수 구문을 허용합니다 . 여기서
- 키워드는 출력 열 이름입니다.
- 값은 첫 번째 요소가 선택할 열이고 두 번째 요소가 해당 열에 적용 할 집계 인 튜플입니다. Pandas는 pandas.NamedAgg namedtuple에 [ 'column', 'aggfunc'] 필드를 제공하여 인수가 무엇인지 명확하게합니다. 평소와 같이 집계는 호출 가능 또는 문자열 별칭 일 수 있습니다.
이제 키워드 인수를 통해 튜플을 전달할 수 있습니다. 튜플은 (<colName>, <aggFunc>)
.
import pandas as pd
pd.__version__
# '0.25.0.dev0+840.g989f912ee'
# Setup
df = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],
'height': [9.1, 6.0, 9.5, 34.0],
'weight': [7.9, 7.5, 9.9, 198.0]
})
df.groupby('kind').agg(
max_height=('height', 'max'), min_weight=('weight', 'min'),)
max_height min_weight
kind
cat 9.5 7.9
dog 34.0 7.5
또는 pd.NamedAgg
더 명시 적으로 만드는 (본질적으로 명명 된 튜플)을 사용할 수 있습니다 .
df.groupby('kind').agg(
max_height=pd.NamedAgg(column='height', aggfunc='max'),
min_weight=pd.NamedAgg(column='weight', aggfunc='min')
)
max_height min_weight
kind
cat 9.5 7.9
dog 34.0 7.5
Series의 경우 더 간단합니다. aggfunc를 키워드 인수에 전달하면됩니다.
df.groupby('kind')['height'].agg(max_height='max', min_height='min')
max_height min_height
kind
cat 9.5 9.1
dog 34.0 6.0
마지막으로 열 이름이 유효한 파이썬 식별자가 아닌 경우 압축을 푼 사전을 사용하십시오.
df.groupby('kind')['height'].agg(**{'max height': 'max', ...})
판다 <0.25
0.24까지의 최신 버전의 Pandas에서는 집계 출력에 대한 열 이름을 지정하기 위해 사전을 사용하는 경우 다음이 표시됩니다 FutureWarning
.
df.groupby('dummy').agg({'returns': {'Mean': 'mean', 'Sum': 'sum'}})
# FutureWarning: using a dict with renaming is deprecated and will be removed
# in a future version
열 이름을 바꾸는 데 사전을 사용하는 것은 v0.20에서 더 이상 사용되지 않습니다. 최신 버전의 pandas에서는 튜플 목록을 전달하여 더 간단하게 지정할 수 있습니다. 이 방법으로 함수를 지정하면 모든 해당 열의 함수는 (이름, 함수) 쌍의 튜플로 지정되어야합니다.
df.groupby("dummy").agg({'returns': [('op1', 'sum'), ('op2', 'mean')]})
returns
op1 op2
dummy
1 0.328953 0.032895
또는,
df.groupby("dummy")['returns'].agg([('op1', 'sum'), ('op2', 'mean')])
op1 op2
dummy
1 0.328953 0.032895