두개의 데이터프레임을 비교해서 해당하는 값의 열을 반환하고 싶습니다.
조회수 2464회
안녕하세요. 백화점 고객데이터를 분석하고 있습니다. 각 고객별로 최대 구매액을 계산한다음 최대 구매액에 해당하는 물건을 추출하고 싶은데 어떤식으로 코드를 짜야할지 잘 모르겠습니다. 즉 고객이 최대 구매액을 주고 산 물건이 궁금한 것인데요. 원본데이터와 feature데이터를 비교해서 feature의 최대 구매엑에 해당하는 원본데이터의 cust_id별 gds_grp_mcla_nm을 반환하고 싶습니다. 제가 시도해봤는데 성공적이지가 않아서 도움주시면 감사하겠습니다.
1 답변
-
저라면 이렇게 하겠어요.
groupby
+transform
을 이용해서,cust_max_amount
컬럼을 추가.amount
가cust_max_amount
와 일치하는 row 만 필터링
import pandas as pd from io import StringIO s = """cust_id,name,amount 11,aaa,33 11,bbb,233 11,ccc,21 22,aaa,33 22,bbb,1 22,ccc,312""" df = pd.read_csv(StringIO(s)) print("-" * 10) print(df.to_markdown()) df["cust_max_amount"] = df.groupby("cust_id")["amount"].transform("max") print("-" * 10) print(df.to_markdown()) # ---------- # | | cust_id | name | amount | cust_max_amount | # |---:|----------:|:-------|---------:|------------------:| # | 0 | 11 | aaa | 33 | 233 | # | 1 | 11 | bbb | 233 | 233 | # | 2 | 11 | ccc | 21 | 233 | # | 3 | 22 | aaa | 33 | 312 | # | 4 | 22 | bbb | 1 | 312 | # | 5 | 22 | ccc | 312 | 312 | df_flt = df[df["amount"] == df["cust_max_amount"]] print("-" * 10) print(df_flt.to_markdown()) # ---------- # | | cust_id | name | amount | cust_max_amount | # |---:|----------:|:-------|---------:|------------------:| # | 1 | 11 | bbb | 233 | 233 | # | 5 | 22 | ccc | 312 | 312 |
댓글 입력