题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
别人几行代码就搞定了我写了这么老长。。。哎。。
sales = pd.read_csv("sales.csv") pd.set_option("display.width", 300) # 设置字符显示宽度 pd.set_option("display.max_rows", None) # 设置显示最大行 pd.set_option("display.max_columns", None) def score(x,data,col,is_high_better=True): q1=data[col].quantile(0.25) q2=data[col].quantile(0.5) q3=data[col].quantile(0.75) if is_high_better==True: if x <= q1: return '4' elif x > q1 and x <= q2: return '3' elif x > q2 and x <= q3: return '2' elif x > q3: return '1' else: if x <= q1: return '1' elif x > q1 and x <= q2: return '2' elif x > q2 and x <= q3: return '3' elif x > q3: return '4' sales['RFMClass']=sales['recency'].apply(lambda x:score(x,sales,'recency',is_high_better=False)).astype(str)+sales['frequency'].apply(lambda x:score(x,sales,'frequency')).astype(str)+sales['monetary'].apply(lambda x:score(x,sales,'monetary')).astype(str) result=sales[sales['RFMClass']=='444'].sort_values(by='monetary').head(5) result_=sales.head(5) print(result_[['user_id','recency','frequency','monetary','RFMClass']]) print('\n') print(result[['user_id','recency','frequency','monetary','RFMClass']])