题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd
df = pd.read_csv("sales.csv")
def get_score(x,df,col,is_big_better=True):
q1 = df[col].quantile(0.25)
q2 = df[col].median()
q3 = df[col].quantile(0.75)
if is_big_better==True:
if x>q3:
return 4
elif x>q2 and x<=q3:
return 3
elif x>q1 and x<=q2:
return 2
elif x<=q1:
return 1
else:
if x>q3:
return 1
elif x>q2 and x<=q3:
return 2
elif x>q1 and x<=q2:
return 3
elif x<=q1:
return 4
a= df['recency'].apply(lambda x0:get_score(x0,df,'recency',is_big_better=False)).astype(str)
b = df['frequency'].apply(lambda x0:get_score(x0,df,'frequency',is_big_better=True)).astype(str)
c = df['monetary'].apply(lambda x0:get_score(x0,df,'monetary',is_big_better=True)).astype(str)
df['RFMClass'] = a + b + c
print(df.head(5))
print("\n")
df2 = df[df['RFMClass']=='444'].sort_values(by=['monetary'],ascending=False).reset_index(drop=True)
print(df2.head(5))