DataFrame 다루기큰 데이터 다루기코드잇 대학교: 수강신청 준비하기

Q

For문 대신 배열 연산을 사용해서 3번 조건을 해결하는 방법이 있을까요?

조회 3143

좋아요 11

2019년 6월 21일




댓글 4

베스트 댓글
2019년 6월 22일
`df['course name'].isin(classlist)`를 사용하시면 될 것 같습니다 (`'course name'`이 `classlist`에 있으면 True, 아니면 False가 들어간 Series를 return합니다)
2019년 6월 22일
와! 대박!! 감사합니다 :) 좋아요를 하나밖에 올릴 수 없다는 게 아쉬울 정도입니다 ㅠ
2021년 3월 14일
질문 드리겠습니다. 이렇게 풀면 information technology 총 수강생이 10명인데 1학년이 7명이라 강의가 폐강되어 나머지 3명도 status에 'not allowed'가 들어가나요?
2022년 6월 8일
와... .isin(). 진짜 고수와 초보는 한끗차인 것 같아요. 도움받고 갑니다.
A
2개의 답변이 있어요
커뮤니티 파트너 채택



2019년 6월 22일

댓글 2

2020년 5월 4일
저는 아래 코드와 같이 새로운 column에 각 수업의 희망 수강생 수가 5보다 적은지를 나타내는 boolean 값을 넣어주고 status에 반영한 다음 다시 그 column을 지워주는 식으로 번거롭게 작업했는데,
질문 작성자님과 Randy님 덕분에 훨씬 편리한 메소드인 df.isin()을 배워가네요.. 감사합니다!!
### Code
.
import pandas as pd
df = pd.read_csv('data/enrolment_1.csv')


### 코드를 작성하세요.
inform1_idx = (df['year'] == 1) & (df['course name'] == 'information technology')
commerce4_idx = (df['year'] ==4) & (df['course name'] == 'commerce')
.
.
course_counts = df['course name'].value_counts()
less5_list = list(course_counts[course_counts < 5].index)
df['less5'] = [a in less5_list for a in df['course name']]
less5_idx = df['less5'] == True
.
.
df['status'] = 'allowed'
df.loc[inform1_idx | commerce4_idx | less5_idx, 'status'] = 'not allowed'
df.drop('less5', axis='columns', inplace=True)
.
.
### 정답 출력
df
2020년 5월 4일
아 그리고 참고로, time 모듈의 time 메소드를 이용해서 같은 결과를 내는데 걸리는 시간을 비교해봤는데,
제 경우에 for문을 돌리는 것보다 질문 작성자님이 시도한 방법이 훨씬 빠르게 나왔습니다!



2023년 4월 28일

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇