题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd
df=pd.read_csv('sales.csv',sep=',')
def get_score(x,df,col,is_ascending=True):
a= df[col].quantile(0.25)
b=df[col].median()
c=df[col].quantile(0.75)
if is_ascending==True:
if x<=a:
return('1')
if a<x<=b:
return('2')
if b<x<=c:
return('3')
if x>c:
return('4')
else:
if x<=a:
return('4')
if a<x<=b:
return('3')
if b<x<=c:
return('2')
if x>c:
return('1')
df['R']=df['recency'].map(lambda x:get_score(x,df,'recency',False))
df['F']=df['frequency'].map(lambda x:get_score(x,df,'frequency',True))
df['M']=df['monetary'].map(lambda x:get_score(x,df,'monetary',True))
df['RFMClass']=df['R']+df['F']+df['M']
u=df[['user_id','recency','frequency','monetary','RFMClass']]
w=df[df['RFMClass']=='444'].sort_values(by='monetary',ascending=False)
print(u.head(5),'\n','\n',w.head(5))
查看16道真题和解析