题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import sys
import pandas as pd
# for line in sys.stdin:
# a = line.split()
# print(int(a[0]) + int(a[1]))
data = pd.read_csv('sales.csv')
recency = data['recency']
frequency = data['frequency']
monetary = data['monetary']
xs1 = recency.quantile(0.25)
mid1 = recency.median()
ss1 = recency.quantile(0.75)
xs2 = frequency.quantile(0.25)
mid2 = frequency.median()
ss2 = frequency.quantile(0.75)
xs3 = monetary.quantile(0.25)
mid3 = monetary.median()
ss3 = monetary.quantile(0.75)
def re_score(value):
if value <= xs1:
return 4
elif value > xs1 and value <= mid1:
return 3
elif value > mid1 and value<= ss1:
return 2
else:
return 1
data['R'] = recency.apply(re_score)
def fr_score(value):
if value <= xs2:
return 1
elif value > xs2 and value <= mid2:
return 2
elif value > mid2 and value<= ss2:
return 3
else:
return 4
data['F'] = frequency.apply(fr_score)
def mon_score(value):
if value <= xs3:
return 1
elif value > xs3 and value <= mid3:
return 2
elif value > mid3 and value<= ss3:
return 3
else:
return 4
data['M'] = monetary.apply(mon_score)
data['RFMClass'] = data['R'].astype(str)+data['F'].astype(str)+data['M'].astype(str)
data = data.drop(['R', 'F', 'M'], axis=1)
print(data.head(5).reset_index(drop=True))
data1 = data[data['RFMClass'] == '444']
data1 = data1.sort_values(by='monetary', ascending=False)
print(data1.head(5).reset_index(drop=True))


