두개의 데이터프레임을 비교해서 해당하는 값의 열을 반환하고 싶습니다.

조회수 68회

안녕하세요. 백화점 고객데이터를 분석하고 있습니다. 각 고객별로 최대 구매액을 계산한다음 최대 구매액에 해당하는 물건을 추출하고 싶은데 어떤식으로 코드를 짜야할지 잘 모르겠습니다. 즉 고객이 최대 구매액을 주고 산 물건이 궁금한 것인데요. 원본데이터와 feature데이터를 비교해서 feature의 최대 구매엑에 해당하는 원본데이터의 cust_id별 gds_grp_mcla_nm을 반환하고 싶습니다. 제가 시도해봤는데 성공적이지가 않아서 이미지도움주시면 감사하겠습니다.이미지

1 답변

  • 저라면 이렇게 하겠어요.

    1. groupby+ transform 을 이용해서, cust_max_amount 컬럼을 추가.
    2. amountcust_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 |
    
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.