파이썬

Python2. 특성 엔지니어링(Feature Engineering): 데이터 필터링 (코드 정리)

dltmfdltmf 2025. 2. 18. 14:14

1. 데이터 필터링 (조건에 맞는 데이터 추출)

 

1) 특정 조건에 맞는 행 필터링

df_filtered = df[df["구매액"] > 50000]  # 구매액 5만 원 초과 고객만 선택

2) 여러 조건 필터링 (AND 조건)

df_filtered = df[(df["연령대"] == "30대") & (df["성별"] == "여성")]  # 30대 여성만 선택

3) 여러 조건 필터링 (OR 조건)

df_filtered = df[(df["카테고리"] == "패션") | (df["카테고리"] == "뷰티")]  # 패션 또는 뷰티 카테고리 구매자만 선택

4) 특정 컬럼 값이 리스트에 포함된 경우

df_filtered = df[df["회원등급"].isin(["VIP", "VVIP"])]  # VIP, VVIP 회원만 선택

5) 특정 컬럼 값이 없는 경우 (결측치 제거)

df_filtered = df.dropna(subset=["구매액"])  # 구매액이 없는 데이터 삭제

 


 

2. 특정 컬럼 선택

1) 특정 컬럼만 선택

df_subset = df[["고객ID", "구매액", "구매일"]]

2) 특정 컬럼 제외

df_subset = df.drop(columns=["주소", "전화번호"])  # 개인정보 관련 컬럼 제거

3) 컬럼 이름 변경

df.rename(columns={"구매액": "Purchase_Amount", "구매일": "Purchase_Date"}, inplace=True)

 


 

3. 데이터 그룹화

[기본 그룹화]

1) 특정 컬럼 기준으로 그룹화 후 합계 (sum())

df_grouped = df.groupby("카테고리")["구매액"].sum()
print(df_grouped)

예시 결과

2) 특정 컬럼 기준으로 그룹화 후 개수 (count())

df_grouped = df.groupby("카테고리")["고객ID"].count()
print(df_grouped)

예시 결과

  • 각 카테고리에서 몇 건의 주문이 발생했는지 확인

3) 여러 컬럼 그룹화 (두 개 이상의 컬럼으로 그룹화)

df_grouped = df.groupby(["회원등급", "카테고리"])["구매액"].sum()
print(df_grouped)

예시 결과

  • 회원 등급별, 카테고리별 총 구매액 분석

4) 그룹별 평균 (mean())

df_grouped = df.groupby("카테고리")["구매액"].mean()

5) 그룹별 최대값 (max())

df_grouped = df.groupby("회원등급")["구매액"].max()

6) 그룹별 여러 개의 값 요약 (agg())

df_grouped = df.groupby("카테고리")["구매액"].agg(["sum", "mean", "max"])
print(df_grouped)

예시 결과

  • 카테고리별 총합, 평균, 최대값 분석

[정렬과 상위 데이터 추출]

1) 구매액이 높은 순서로 정렬

df_sorted = df.sort_values(by="구매액", ascending=False)

2) 가장 많이 구매한 고객 Top 5

df_top_customers = df.groupby("고객ID")["구매액"].sum().sort_values(ascending=False).head(5)

3) 가장 많이 팔린 카테고리 Top 3

df_top_categories = df.groupby("카테고리")["구매액"].sum().nlargest(3)

 


[피처 엔지니어링_기존 데이터 가공하여 새 인사이트 얻을 수 있는 변수 추가]

1) 만족도 점수 기반으로 고객 그룹화

# 제품 만족도 점수가 4 이상이면 "High", 그렇지 않으면 "Low"
df["Satisfaction Level"] = df["Product Satisfaction"].apply(lambda x: "High" if x >= 0.8 else "Low")

print(df)

 


 

4. value_counts()로 빠르게 데이터 집계

1) 특정 컬럼 값 개수 세기

df["회원등급"].value_counts()

2) 상위 5개만 출력

df["카테고리"].value_counts().head(5)

 


 

5. 날짜 데이터 다루기

1) 날짜 컬럼 변환

df["구매일"] = pd.to_datetime(df["구매일"])

2) 특정 연도/월 필터링

df_filtered = df[df["구매일"].dt.year == 2023]  # 2023년 데이터만 선택
df_filtered = df[df["구매일"].dt.month == 12]  # 12월 데이터만 선택

3) 날짜별 집계

df.groupby(df["구매일"].dt.date)["구매액"].sum()

 


 

6. 특정 조건으로 데이터 정렬

1) 구매액 높은 순으로 정렬

df_sorted = df.sort_values(by="구매액", ascending=False)

2) 회원 등급별, 구매액 높은 순 정렬

df_sorted = df.sort_values(by=["회원등급", "구매액"], ascending=[True, False])