题解 | 筛选某店铺最有价值用户中消费最多前5名
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd from numpy import True_ sales = pd.read_csv('sales.csv') pd.set_option('display.max_columns', None)# 显示所有的列,而不是以……显示 pd.set_option('display.max_rows', None)# 显示所有的行,而不是以……显示 pd.set_option('display.width', None) # 不自动换行显示 def rank(s,q): top_quantile=s[q].quantile(0.75) down_quantile=s[q].quantile(0.25) med=s[q].median() quartile=[] if q=='recency': for i in s[q]: if i<= down_quantile: quartile.append(4) elif i>down_quantile and i<=med: quartile.append(3) elif i>med and i<=top_quantile: quartile.append(2) else: quartile.append(1) else: for i in s[q]: if i<= down_quantile: quartile.append(1) elif i>down_quantile and i<=med: quartile.append(2) elif i>med and i<=top_quantile: quartile.append(3) else: quartile.append(4) return quartile sales['R_Quartile']=rank(sales,'recency') sales['F_Quartile']=rank(sales,'frequency') sales['M_Quartile']=rank(sales,'monetary') sales['RFMClass'] = sales['R_Quartile'].apply(str) + sales['F_Quartile'].apply(str)+ sales['M_Quartile'].apply(str) sales.drop(['R_Quartile', 'F_Quartile', 'M_Quartile'], axis = 1, inplace=True) print(sales.head()) print() # print('\n') result = sales[sales['RFMClass'] == '444'].sort_values(by = 'monetary', ascending= False).reset_index(drop=True) print(result.head())