如何解决分位数熊猫
什么不起作用:
def ATVscore(x,p,d):
if x <= d[p][0.25]:
return 4
elif x <= d[p][0.50]:
return 3
elif x <= d[p][0.75]:
return 2
else:
return 1
df_segmented['atv_quartile'] = df_segmented['Average_Transaction_Value'].apply(ATVscore,args = ('Average_Transaction_Value',quantiles,))
工作原理:
分位数:
quantiles = df_final_table.quantile(q=[0.25,0.5,0.75])
quantiles = quantiles.to_dict()
def Rscore(x,d):
if x <= d[p][0.25]:
return 1
elif x <= d[p][0.50]:
return 2
elif x <= d[p][0.75]:
return 3
else:
return 4
def FMscore(x,d):
if x <= d[p][0.25]:
return 4
elif x <= d[p][0.50]:
return 3
elif x <= d[p][0.75]:
return 2
else:
return 1
df_segmented['recency_quartile'] = df_segmented['recency'].apply(Rscore,args = ('recency',))
df_segmented['frequency_quartile'] = df_segmented['frequency'].apply(FMscore,args = ('frequency',))
df_segmented['monetary_quartile'] = df_segmented['monetary'].apply(FMscore,args = ('monetary',))
数据:
错误:
解决方法
代码问题最有可能是分位数的内容。
创建此变量后,打印其内容。 可能包含以下内容:
{'recency': {0.25: 350.0,0.5: 500.0,0.75: 600.0},'frequency': {0.25: 370.0,0.5: 520.0,0.75: 620.0},'monetary': {0.25: 390.0,0.5: 540.0,0.75: 640.0}}
(作为每个嵌入式词典的值,我传递了任意值)。
现在,当您应用 ATVScore 且其余参数为 'Average_Transaction_Value'作为 p ,分位数作为 d ,此函数:
- 试图执行
if x <= d[p][0.25]:
(几乎在您的末尾 StackTrace), - 执行
d[p]
会尝试找到'Average_Transaction_Value' 输入分位数, - 由于分位数不包含此密钥,因此会出现 KeyError 异常 被抛出。
将'Average_Transaction_Value'键添加到分位数,其值为 类似于 {0.25:410.0,0.5:560.0,0.75:660.0}} 并且您的代码应该没有错误地运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。