题解 | 筛选某店铺最有价值用户中消费最多前5名
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd
pd.set_option('display.width',300)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns',None)
df = pd.read_csv('sales.csv')
quantiles = df.quantile([0.25,0.5,0.75])
def score(x, col):
q1, q2, q3 = quantiles[col]
return 4 if x <= q1 else 3 if x <= q2 else 2 if x <= q3 else 1
def score_reverse(x, col):
q1,q2,q3 = quantiles[col]
return 1 if x <= q1 else 2 if x <= q2 else 3 if x <= q3 else 4
df['R_Quartile']=df['recency'].apply(score, col='recency').astype(str)
df['F_Quartile']=df['frequency'].apply(score_reverse, col='frequency').astype(str)
df['M_Quartile']=df['monetary'].apply(score_reverse, col='monetary').astype(str)
df['RFMClass'] = df['R_Quartile']+df['F_Quartile']+df['M_Quartile']
res = df.drop(columns=['R_Quartile','F_Quartile','M_Quartile'])
res1 = res[res['RFMClass']=='444'].sort_values(by='monetary',ascending=False).reset_index(drop=True)
print(res.head(),'\n')
print(res1.head())
查看1道真题和解析