tak's data blog

효율적인 코드 작성(고객별 누적 주문횟수 계산) 본문

이것저것

효율적인 코드 작성(고객별 누적 주문횟수 계산)

hyuntaek 2022. 8. 2. 15:54
반응형
SMALL

 

 

데이터가 아래와 같을 때 (cust: 고객)
고객별로 order_stack(주문누적횟수)를 1씩늘려가며 작성하려고 한다. 순간 groupby를 잊어버려서 비효율적인 코드를 작성하였다.

 

진짜 단순하게 생각해서 고객(cust)을 unique하게 따로 뽑아둔다음

고객에따라 데이터프레임을 재생성해 rank함수로 순위를 매기고 다시 데이터프레임을 합치려고 하였다...

참 1차원적인 생각이었는데 데이터가 상당수가 되다보니 이렇게하면 1시간 이상의 시간이 소요되기 때문에 apply를 사용해서 해결할 수는 없을까 고민했다. 

상품재구매기간_final['order_stack'] = 0
cust = 상품재구매기간_final['cust'].unique()
df = 상품재구매기간_final[['index', 'cust', 'order_stack']]
cust_df = pd.DataFrame()



def order_st(x):
    cust_상품 = df[df['cust'] == x]
    cust_상품['order_stack'] = cust_상품['index'].rank(method='first')
    return cust_상품

for i in tqdm(cust):
	cust_df = pd.concat([cust_df, cust_상품])

 

 

30분동안 고민하면서 groupby의 위대함을 다시 느낀다.

groupby로 고객별로 묶고 index를 기준으로 rank를 활용해보았다. 

상품재구매기간_final['order_stack'] = 상품재구매기간_final.groupby('cust')['index'].rank(method='first')

왜 이 쉬운걸 30분동안 생각했는지 이제 배웠으니 다음엔 절대 안까먹겠다.

 

아래와 같은 결과물을 뽑을 수 있었다.

반응형
LIST

'이것저것' 카테고리의 다른 글

RFM 분석  (0) 2023.07.03
푸리에 변환(fourier transform)  (0) 2023.02.25
데이터프레임 행간의 계산  (0) 2022.07.16