728x90
실무에서는 단순히 “age가 30 이상” 같은 조건이 아니라,
“30대 이상이고 점수가 85점 이상이며, 가입일이 2023년 이후이고, 결측치는 제외” 같은 복합적인 조건이 붙는다.
예제 데이터
import pandas as pd
import numpy as np
df = pd.DataFrame({
'user_id': [1001, 1002, 1003, 1004, 1005],
'age': [25, 32, 40, np.nan, 29],
'score': [88, 92, 85, 70, np.nan],
'signup_date': ['2022-12-15', '2023-01-10', '2023-02-20', '2023-03-01', '2023-01-25'],
'membership': ['basic', 'premium', 'basic', 'premium', 'basic']
})
df['signup_date'] = pd.to_datetime(df['signup_date'])
요구 조건
- age가 30 이상
- score가 85 이상
- signup_date가 2023년 이후
- score, age에 결측치 없음
- membership이 premium
조건 조합 적용
filtered = df[
(df['age'] >= 30) &
(df['score'] >= 85) &
(df['signup_date'] >= '2023-01-01') &
df['age'].notna() &
df['score'].notna() &
(df['membership'] == 'premium')
]
자주 쓰는 조건 조합 요약
기능 | 코드 예시 | 설명 |
범위 조건 | df['age'].between(30, 40) | 30 이상 40 이하 |
결측 제외 | df['score'].notna() | NaN 제외 |
문자열 포함 | df['membership'].str.contains('premium') | 특정 단어 포함 |
리스트 포함 | df['user_id'].isin([1001, 1005]) | 특정 값들 포함 |
날짜 비교 | df['signup_date'] >= '2023-01-01' | 날짜 필터 |
1. 예제: 상위 N명 + 조건 필터 조합
top_users = df[df['score'].notna()].sort_values(by='score', ascending=False).head(3)
→ 결측치 제거 후 score 기준 상위 3명 추출
2. 예제: 조건 필터 + 특정 컬럼만 보기
df.loc[
(df['age'] >= 30) & (df['score'] >= 85),
['user_id', 'age', 'score']
]
→ 조건 필터 + 일부 열만 가져오는 실무 패턴
단순 조건 하나만으로는 실무 문제를 해결할 수 없다.
Boolean Indexing + .notna() + .between() + .isin() + loc 등을 조합하면
복잡한 조건도 간결하게 필터링할 수 있다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
[Pandas] query() (loc보다 더 깔끔하게 조건 필터링) (0) | 2025.04.24 |
---|---|
[Pandas] filter() (0) | 2025.04.24 |
[Pandas] 데이터 타입 확인 및 변환 – dtypes, astype() (0) | 2025.04.24 |
[Pandas] 결측치(NaN) 처리 (0) | 2025.04.24 |
[Pandas] 정렬과 순위 매기기 – sort_values, rank (0) | 2025.04.24 |