首页 > 解决方案 > 在python中,如何根据具有下限和上限的查找表对范围进行分类

问题描述

编辑:这个问题被标记为重复,但我查看了另一个问题的解决方案,它并没有完全解决我的问题。所以这不是重复的。

我有一个带有数字变量的数据集,我想将它们映射到存储在查找表中的证据权重。下面是一个例子,但我有很多变量要转换。我怎样才能自动化呢?我过去曾使用 SAS 和 SQL 完成此操作,但不知道如何在 Python 中执行此操作?我搜索了互联网,但找到了使用 pd.cut 的示例。但是,它需要我们手动编码 bin 范围。我不确定如何自动执行此操作。我希望下限大于或等于(>=),上限小于(<)。

我在下面写了一个代码。我在掩码语句中收到错误。你能告诉我代码有什么问题吗?谢谢。

temp_dict = {'var1': [4, 2, 2, 4, 7, 4, 12, 8, 17, 42, 33, 10, 7, 5, 17, 29, 64, 20, 39, 6], 
             'var2': [9, 8, 2, 17, 14, 14, 16, 8, -999999999,-999999999, 10, -999999999, 16, 20, 17,
                      -999999999, -999999999, -999999999,-999999999, 3]}
df = pd.DataFrame.from_dict(temp_dict) 

查找表:

指数 特征名称 下限 上限 祸不单行
0 变量1 -999999990 1.5 1.363071
1 变量1 1.5 2.5 1.231135
2 变量1 2.5 3.5 0.819431
3 变量1 3.5 14.5 0.617399
4 变量1 14.5 15.5 -0.62779
5 变量1 15.5 20.5 -0.706259
6 变量1 20.5 999999990 -0.950134
7 变量1 -999999999 -999999999 0
8 变量1 0
0 变量2 -999999990 0.5 0.951202
1 变量2 0.5 1.5 0.427215
2 变量2 1.5 2.5 0.218994
3 变量2 2.5 3.5 0.026722
4 变量2 3.5 13.5 -0.071878
5 变量2 13.5 999999990 -1.615368
6 变量2 -999999999 -999999999 0
7 变量2 0

期望的结果:

变量1 变量2 WoE_var1 WoE_var2
4 9 0.617399 -0.071878
2 8 1.231135 -0.071878
2 2 1.231135 0.218994
4 17 0.617399 -1.615368
7 14 0.617399 -1.615368

编辑:

我想通了。这是代码。

binned_vars= ['var1','var2'..'varn']
short_list= ['var1','var2']
for variable in binned_vars:
    if variable in short_list:
        for i in lookup_table[(lookup_table['feature_name'] == variable)]['Index'].to_list():
            lower_limit = lookup_table[(lookup_table['feature_name'] == variable) & (lookup_table['Index'] == i)]['lower_limit'].to_list()[0]
            upper_limit = lookup_table[(lookup_table['feature_name'] == variable) & (lookup_table['Index'] == i)]['upper_limit'].to_list()[0]
            WoE = lookup_table[(lookup_table['feature_name'] == variable) & (lookup_table['Index'] == i)]['WoE'].to_list()[0]  
            mask = ((df[variable] >= lower_limit) & (df[variable] < upper_limit))
            var_name = variable + '_WoE'
            df.loc[mask,var_name] = WoE

标签: pythonpandas

解决方案


推荐阅读