Post

[Pandas 기초] 4. DataFrame 집계

Python Library 중 하나인 Pandas에서 DataFrame을 집계하는 방법을 알아보자.

  • 상세 데이터가 아닌 집계된 데이터에 대한 분석을 자주 요구하니 익숙해져야 할 내용임.
  • sum(), mean(), max(), min(), count() 메소드를 사용해 지정한 열 또는 열들을 기준으로 집계한다.

Groupby

  • df.groupby(['집계기준변수'], as_index=)['집계대상변수'].집계함수
    • 집계기준변수 : ~~별에 해당되는 변수 혹은 리스트. 범주형 변수 (ex: 월 별, 지역 별 등)
    • 집계대상변수 : 집계함수로 집계할 변수 혹은 리스트. (ex: 매출액 합계)
  • as_index = True (Default)
    • 집계기준변수를 인덱스로 사용
1
2
3
4
5
6
# 데이터 읽어오기
path = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/Attrition_simple2.CSV'
data = pd.read_csv(path)  

# 상위 5개 확인
data.head(5)
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
00337817Male3Married11691No1114
1035181412Male4Single9362No1110
204261911Male1Married13348No1318
304621204Female1Married17048No2328
41224593Male3Single3894No164

열 하나 집계

1
2
# MonthlyIncome 합계
data['MonthlyIncome'].sum()
1
7798045
1
2
# MonthlyIncome, TotalWorkingYears 각각의 평균
data[['MonthlyIncome', 'TotalWorkingYears']].mean()
1
2
3
MonthlyIncome        6520.104515
TotalWorkingYears      11.330268
dtype: float64
1
2
# MaritalStatus 별 Age 평균 --> 시리즈
data.groupby('MaritalStatus', as_index=True)['Age'].mean()
1
2
3
4
5
MaritalStatus
Divorced    37.522727
Married     37.704380
Single      35.460938
Name: Age, dtype: float64
1
2
# MaritalStatus 별 Age 평균 --> 데이터프레임
data.groupby('MaritalStatus', as_index=True)[['Age']].mean()
Age
MaritalStatus
Divorced37.522727
Married37.704380
Single35.460938
1
2
# MaritalStatus 별 Age 평균 --> 데이터프레임
data.groupby('MaritalStatus', as_index=False)[['Age']].mean()
MaritalStatusAge
0Divorced37.522727
1Married37.704380
2Single35.460938
1
2
3
4
data_mean = data.groupby('MaritalStatus', as_index=False)[['Age']].mean()

# 확인
data_mean
MaritalStatusAge
0Divorced37.522727
1Married37.704380
2Single35.460938

여러 열 집계

1
2
3
4
data_mean = data.groupby('MaritalStatus', as_index=False)[['Age','MonthlyIncome']].mean()

# 확인
data_mean
MaritalStatusAgeMonthlyIncome
0Divorced37.5227276707.018939
1Married37.7043806880.144161
2Single35.4609385877.794271
  • sum() 메소드 앞에 아무 열도 지정하지 않으면 기준열 이외의 모든 열에 대한 집계가 수행됩니다.
1
2
3
4
data_sum = data.groupby('MaritalStatus', as_index=False).sum()

# 확인
data_sum
MaritalStatusAttritionAgeDistanceFromHomeEmployeeNumberJobSatisfactionMonthlyIncomePercentSalaryHikeTotalWorkingYears
0Divorced2399062404266305716177065339583106
1Married692066252955844461468377031984316470
2Single1031361733743878621065225707358523975
  • by=[‘feature1’, ‘feature2’] 과 같이 집계 기준 열을 여럿 설정할 수도 있습니다.
1
2
3
4
5
# 'MaritalStatus', 'Gender'별 나머지 열들 평균 조회
data_sum = data.groupby(['MaritalStatus', 'Gender'], as_index=False)[['Age','MonthlyIncome']].mean()

# 확인
data_sum
MaritalStatusGenderAgeMonthlyIncome
0DivorcedFemale37.0105266626.315789
1DivorcedMale37.8106516752.384615
2MarriedFemale38.7741947301.493088
3MarriedMale37.0030216603.912387
4SingleFemale35.2611465963.445860
5SingleMale35.5991195818.555066

Aggregation

  • df.groupby( ).agg([‘함수1’,’함수2’, …])
  • 여러 함수로 한꺼번에 집계
  • as_index 예외 : .agg()를 사용하면 as_index = False 해도, ~~별 칼럼이 인덱스로 들어간다.
1
2
3
data_agg = data.groupby('MaritalStatus', as_index=False)[['MonthlyIncome']].agg(['min','max','mean'])
# 확인
data_agg
MonthlyIncome
minmaxmean
MaritalStatus
Divorced1129199736707.018939
Married1052199996880.144161
Single1009199265877.794271
This post is licensed under CC BY 4.0 by the author.

[Pandas 기초] 3. DataFrame 조회

[Pandas 기초] 5. DataFrame 변경