Py) 전처리 - Filtering-03

Py) 전처리 - Filtering-03

특정 사용자 모두가 구매한 물품 목록을 뽑아보려 한다. 필터링을 어떻게 활용하는지 알아보자.

preprocessing_purchase_list.csv 다운받기 [클릭]

데이터 준비

다음과 같이 데이터가 있다고 하자.

item: 상품명
id: 고객 식별자

1
2
3
import pandas as pd
df = pd.read_csv("data/preprocessing_purchase_list.csv")
df
item id
0 a 1
1 a 2
2 b 1
3 b 2
4 b 3
5 b 4
6 c 1
7 c 3
8 c 4

예를 들어 대상 고객 식별자가 1과 3이라고 했을 때 해당 고객이 구매한 상품은 다음과 같이 확인할 수 있다.

1
2
id_target = [1, 3]
df.loc[df["id"].isin(id_target), ]
item id
0 a 1
2 b 1
4 b 3
6 c 1
7 c 3
1
2
df.loc[df["id"].isin(id_target), "item"].unique()
## array(['a', 'b', 'c'], dtype=object)

사실상 대상 고객이 구매한 상품을 골라내는 것이라면 여기서 끝났겠지만, 여기서는 대상 고객 모두가 구매한 상품 목록을 추출하는 것이기 때문에 코드를 조금 더 작성해보겠다.

대상 고객 식별자가 2개이기 때문에 “item” 변수가 2번 집계된 경우는 대상 고객이 모두 구매한 상품이라고 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
df.loc[df["id"].isin(id_target), "item"].value_counts()
## c 2
## b 2
## a 1
## Name: item, dtype: int64

df.loc[df["id"].isin(id_target), "item"].value_counts() == len(id_target)
## c True
## b True
## a False
## Name: item, dtype: bool

이제 필요한 것은 “b”와 “c” 상품이다. 이를 뽑아내기 위해서 코드를 길게 쓸 수도 있지만 비교적 간단하게 끝내는 코드는 다음과 같다.

1
2
3
df_cnt = df.loc[df["id"].isin(id_target), "item"].value_counts()
df_cnt[df_cnt == len(id_target)].index
## Index(['c', 'b'], dtype='object')
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×