tak's data blog
효율적인 코드 작성(고객별 누적 주문횟수 계산) 본문
데이터가 아래와 같을 때 (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분동안 생각했는지 이제 배웠으니 다음엔 절대 안까먹겠다.
아래와 같은 결과물을 뽑을 수 있었다.
'이것저것' 카테고리의 다른 글
푸리에 변환(fourier transform) (0) | 2023.02.25 |
---|---|
데이터프레임 행간의 계산 (0) | 2022.07.16 |