题解 | #筛选某店铺最有价值用户中消费最多前5名#
筛选某店铺最有价值用户中消费最多前5名
https://www.nowcoder.com/practice/58655010a7c34e9fb2b7b491c3f79ca4
import pandas as pd import pandas as pd sales = pd.read_csv("sales.csv") pd.set_option("display.max_columns", None) # 显示所有的列,而不是以……显示 pd.set_option("display.max_rows", None) # 显示所有的行,而不是以……显示 pd.set_option("display.width", None) # 不自动换行显示 # pd.quantile()为求分位数操作,需要自行在里面添加数值 # 默认值: # quantile( q=0.5, axis: 'Axis' = 0, numeric_only: 'bool' = True, interpolation:'str' = 'linear') # 第一步:先定义分位数 r1 = sales["recency"].quantile(q=0.25) r2 = sales["recency"].quantile(q=0.5) r3 = sales["recency"].quantile(q=0.75) f1 = sales["frequency"].quantile(q=0.25) f2 = sales["frequency"].quantile(q=0.5) f3 = sales["frequency"].quantile(q=0.75) m1 = sales["monetary"].quantile(q=0.25) m2 = sales["monetary"].quantile(q=0.5) m3 = sales["monetary"].quantile(q=0.75) # 第二步:分别定义分段函数 def r_value(x): if x <= r1: return 4 elif x > r1 and x <= r2: return 3 elif x > r2 and x <= r3: return 2 else: return 1 def f_value(x): if x >= f3: return 4 elif x >= f2 and x < f3: return 3 elif x > f1 and x <= f2: return 2 else: return 1 def m_value(x): if x >= m3: return 4 elif x >= m2 and x < m3: return 3 elif x > m1 and x <= m2: return 2 else: return 1 sales["RFMClass"] = sales["recency"].apply(r_value).astype("str")+sales["frequency"].apply(f_value).astype("str")+sales["monetary"].apply(m_value).astype("str") # 结果 print(sales.head()) print(sales['RFMClass' == '444'].head())
学会惹