【问题标题】:Python: Lookup based on 4 conditions using conditional_join [duplicate]Python:3个条件的查找表[重复]
【发布时间】:2022-10-13 18:32:23
【问题描述】:

嗨,我想根据 3 个条件进行查找以获取我的数据集的因子值。 下面是查找表:

Lookup_Table = {'State_Cd': ['TX','TX','TX','TX','CA','CA','CA','CA'],
        'Deductible': [0,0,1000,1000,0,0,1000,1000],
                'Revenue_1': [-99999999,25000000,-99999999,25000000,-99999999,25000000,-99999999,25000000],
                'Revenue_2': [24999999,99000000,24999999,99000000,24999999,99000000,24999999,99000000],
                'Factor': [0.15,0.25,0.2,0.3,0.11,0.15,0.13,0.45]
        }   
Lookup_Table = pd.DataFrame(Lookup_Table, columns = ['State_Cd','Deductible','Revenue_1','Revenue_2','Factor'])

查找输出:

Lookup_Table
State_Cd    Deductible  Revenue_1   Revenue_2   Factor
0   TX             0    -99999999   24999999    0.15
1   TX             0    25000000    99000000    0.25
2   TX          1000    -99999999   24999999    0.20
3   TX          1000    25000000    99000000    0.30
4   CA             0    -99999999   24999999    0.11
5   CA             0    25000000    99000000    0.15
6   CA          1000    -99999999   24999999    0.13
7   CA          1000    25000000    99000000    0.45

然后下面是我的数据集。

Dataset = {'Policy': ['A','B','C'],
        'State': ['CA','TX','TX'],
                'Deductible': [0,1000,0],
                'Revenue': [10000000,30000000,1000000]          
        }   
Dataset = pd.DataFrame(Dataset, columns = ['Policy','State','Deductible','Revenue'])

数据集输出:

Dataset
Policy  State   Deductible  Revenue
0   A   CA         0       1500000
1   B   TX         1000    30000000
2   C   TX         0       1000000

所以基本上要进行查找,State 必须与查找表中的 State_Cd 匹配,Deductible 应该与查找表中的免赔额匹配,最后对于 Revenue,它应该在 Revenue_1 和 Revenue_2 之间(Revenue_1<=Revenue<=Revenue_2 )。达到所需的因子值。 以下是我在获取因子时的预期输出:

   Policy   State   Deductible  Revenue    Factor
    0   A   CA             0    1500000     0.11
    1   B   TX          1000    30000000    0.30
    2   C   TX             0    1000000     0.15

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这将是一种方法:

    factors = list()
    
    for index, row in Dataset.iterrows():
        revenue = row["Revenue"]
        mask1 = Lookup_Table["State_Cd"] == row["State"]
        mask2 = Lookup_Table["Deductible"] == row["Deductible"]
        selection = Lookup_Table[mask1 & mask2]
        mask3 = selection["Revenue_1"] <= revenue
        mask4 = revenue <= selection["Revenue_2"]
        result = selection[mask3 & mask4]
        factors.append(result["Factor"].values[0])
    
    Dataset["Factor"] = factors
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2014-04-07
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多