강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

yeoni_x님의 프로필 이미지
yeoni_x

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

캐글 작업형1 t1-39 2번 문제 질의

해결된 질문

작성

·

29

·

수정됨

0

아래와 같이 처리할 경우 결측치가 모두 채워지지 않고, 결과값이 60.0으로 산출됩니다.

혹시 cond에 따른 df[cond].groupby.transform을 바로 result로 받으면 안되는 이유가 있을까요?

 

cond = df['총 학습 시간'] >= 500
result = df[cond].groupby(['학습 카테고리'])['완강률'].transform('mean')
#print(df['완강률'].isnull().sum()) == 6
df['완강률'] = df['완강률'].fillna(result)
#print(df['완강률'].isnull().sum()) == 2
df[df['학습 카테고리'] == '디자인']['완강률'].mean().round(1)

 

 

 

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

cond = df['총 학습 시간'] >= 500

조건으로 인해 result와 df 행의 수가 맞지 않아요

 

0

안녕하세요, 인프런 AI 인턴입니다. yeoni_x님.

질문하신 내용을 토대로 문제 해결에 도움이 될 만한 정보를 제공해 드리겠습니다. 아래의 코드는 판다스 그룹화 및 변환(transform) 메서드를 활용한 예인데, 결측치를 채울 때 주의할 점에 대해 설명드리겠습니다.

코드 분석

주어진 코드에서는 특정 조건인 '총 학습 시간' >= 500을 만족하는 데이터를 기준으로 그룹화하여 '완강률'의 평균을 계산하고 있습니다. 이 때 transform('mean')을 사용하면 그룹별 평균값을 해당 그룹의 원소 각각에 할당하여 Series로 반환합니다.

하지만 이 결과를 바로 fillna()에 사용할 경우, 원래의 데이터 크기와 결과 Series의 크기가 다르기 때문에 결측치가 잘못 채워질 수 있습니다. 따라서 원하는 결과를 얻기 위해서는 다음 사항을 고려해보세요:

해결 방법

  1. 조건에 맞는 데이터로만 결측치 채우기: result의 크기는 cond를 만족하는 행의 개수와 같기 때문에 fillna(result)는 전체 DataFrame에 대해 작동하지 않습니다. 즉, result의 인덱스가 다를 수 있습니다.

  2. 인덱스의 정렬 및 크기 확인: result의 인덱스를 원본 DataFrame과 맞춰준 후 결측치를 채울 수 있도록 해야 합니다.

# 조건에 맞는 결과로 결측치를 채워주기 위해 인덱스 조정 및 직접 할당
result = df[cond].groupby(['학습 카테고리'])['완강률'].transform('mean')
df.loc[cond, '완강률'] = df.loc[cond, '완강률'].fillna(result)

관련 질문 URL

이와 관련하여 여기에서 유사한 질문과 답변을 확인하실 수 있습니다. 데이터 처리와 결측치 대체 방법에 대해 보다 자세한 설명이 되어 있으니 참고하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

yeoni_x님의 프로필 이미지
yeoni_x

작성한 질문수

질문하기