题解 | #筛选某店铺最有价值用户中消费最多前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))