【问题标题】:Replacing the Weight-of-Evidence (WoE) with its corresponding value将证据权重 (WoE) 替换为其相应的值
【发布时间】:2019-12-08 07:39:25
【问题描述】:

我有一个名为x 的变量,其最小值为零,最大值为200 万。所以我把值分成这样的代码:

bins = [0,1,10000,20000,50000,60000,70000,100000,2000000]
df_input['X_bins'] = pd.cut(df_input['X'], bins,right=False)

目前我正在使用 for-loop 将每个 bin 替换为它们的证据权重值:

def flag_dfstd(df_input):
    if (df_input['X'] >=0) & (df_input['X'] <100) :
        return '-0.157688'
    elif (df_input['X'] >=100) & (df_input['X'] < 10000) :
        return '-0.083307'
    elif (df_input['X'] >=10000) & (df_input['X'] < 20000) :
        return '0.381819'
    elif (df_input['X'] >=20000) & (df_input['X'] < 50000):
        return '0.364365'
    else:
        return '0'
df_input['X_WOE'] = df_input.apply(flag_dfstd, axis = 1).astype(str) 

有没有办法可以在不使用 for 循环的情况下替换证据权重?

【问题讨论】:

  • 有没有办法可以在不使用 for 循环的情况下替换证据的权重

标签: python pandas machine-learning


【解决方案1】:

我认为您需要 cut 和参数 labels 并且对于替换错误值是必要的,在替换之前添加 cat.add_categories

df_input = pd.DataFrame({'X':[0,20,100, 10000, 30000, 1000000]})

b = [-np.inf, 100, 10000, 20000, 50000]
l = ['-0.157688', '-0.083307', '0.381819', '0.364365']

df_input['X_WOE'] = pd.cut(df_input['X'], bins=b, labels=l,right=False)
df_input['X_WOE'] = df_input['X_WOE'].cat.add_categories(['0']).fillna('0')
print (df_input)
         X      X_WOE
0        0  -0.157688
1       20  -0.157688
2      100  -0.083307
3    10000   0.381819
4    30000   0.364365
5  1000000          0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多