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