分位数Pandas

2024-10-02 22:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

什么不起作用:

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,p,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,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['recency_quartile'] = df_segmented['recency'].apply(RScore, args = ('recency', quantiles,))
df_segmented['frequency_quartile'] = df_segmented['frequency'].apply(FMScore, args = ('frequency', quantiles,))
df_segmented['monetary_quartile'] = df_segmented['monetary'].apply(FMScore, args = ('monetary', quantiles,))

数据: Data

错误:

Error


Tags: dfreturnifdefargselseapplymonetary
1条回答
网友
1楼 · 发布于 2024-10-02 22:32:25

代码的问题很可能出现在分位数的内容中

创建此变量后,打印其内容。 它可能包含以下内容:

{'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时,剩下的参数如下 “平均交易值”asp分位数asd,此函数:

  • 尝试执行if x <= d[p][0.25]:(几乎在任务结束时) StackTrace)
  • 执行d[p]它尝试查找的“平均事务值” 输入分位数
  • 由于分位数不包含此键,因此出现键错误异常 被抛出

平均事务值键添加到分位数,值为 类似于{0.25:410.0,0.5:560.0,0.75:660.0}} 您的代码应该运行无误

相关问题 更多 >