题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd
df=pd.read_csv('sales.csv',sep=',')
r1=df['recency'].quantile(0.25)
r2=df['recency'].quantile(0.5)
r3=df['recency'].quantile(0.75)
f1=df['frequency'].quantile(0.25)
f2=df['frequency'].quantile(0.5)
f3=df['frequency'].quantile(0.75)
m1=df['monetary'].quantile(0.25)
m2=df['monetary'].quantile(0.5)
m3=df['monetary'].quantile(0.75)
df['r']=df.apply(lambda x:4 if x.recency<=r1 else (3 if x.recency>r1 and x.recency<=r2 else (2 if x.recency>r2 and x.recency<=r3 else 1)),axis=1)
df['f']=df.apply(lambda x:1 if x.frequency<=r1 else (2 if x.frequency>r1 and x.frequency<=r2 else (3 if x.frequency>r2 and x.frequency<=r3 else 4)),axis=1)
df['m']=df.apply(lambda x:1 if x.monetary<=r1 else (2 if x.monetary>r1 and x.monetary<=r2 else (3 if x.monetary>r2 and x.monetary<=r3 else 4)),axis=1)
df['RFMClass']=df['r'].map(str)+df['f'].map(str)+df['m'].map(str)
df1=df
df=df.drop(columns=['r','f','m'],axis=1)
print(df[:5].to_string())
print('')
df1=df1[df1['RFMClass']=='444']
df1=df1.sort_values(by=['monetary'],ascending=True).reset_index(drop=True)
print(df1[:5])

