题解 | 筛选某店铺最有价值用户中消费最多前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())

