【问题标题】:Python - Lookup a value in the dataframe for the same IDPython - 在数据框中查找相同 ID 的值
【发布时间】:2020-07-30 22:10:18
【问题描述】:

我有如下数据框

ID    TYPE    POLICY_NUMBER       DISB_AMT
738   20      FLDINC MSH39990     1
738   21      MSH39990            3848
750   20      INF395737           1
750   21      INF395737 FLDINCL   2350
892   20      SJK389743           3904
892   21      MSH284989           1     

我正在尝试按 ID 分组并提取策略编号并在其他 TYPE 中搜索,例如:(TYPE = 20 或 21)如果策略编号在两个 TYPE 中相同,则检查是否 DISB_AMT>1在两排。如果为 true,则不要将其附加到数据框。

例如:ID 738 在两行中具有相同的策略编号 MSH39990。我写了一个脚本来只提取数字,以便更容易比较。 ID 738 具有相同的保单编号。现在我们检查 DISB_AMT 是否 > 1。在第一行中它不是 >1。在第二行中,我们有 3848>1。不要在结果中包含此 ID。对于 ID 892,由于两种 TYPE 中的 POLICY NUMBER 不同,我们仅检查 DISB_AMT>1 是否为 TYPE 21。由于它不是 >1,因此我们将此行添加到结果数据帧中。

如何将其与其他类型进行比较并检查策略编号是否相同并构建其余逻辑?

预期输出

ID    TYPE    POLICY_NUMBER       DISB_AMT
892   21      MSH284989           1

代码

data = [{"ID":738,"TYPE":20,"POLICY_NUMBER":"FLDINC MSH39990","DISB_AMT":1},
        {"ID":738,"TYPE":21,"POLICY_NUMBER":"MSH39990","DISB_AMT":3848},
        {"ID":750,"TYPE":20,"POLICY_NUMBER":"INF395737","DISB_AMT":1},
        {"ID":750,"TYPE":21,"POLICY_NUMBER":"INF395737 FLDINCL","DISB_AMT":2350},
        {"ID":892,"TYPE":20,"POLICY_NUMBER":"SJK389743","DISB_AMT":3904},
        {"ID":892,"TYPE":21,"POLICY_NUMBER":"MSH284989","DISB_AMT":1}
        ]

df=pd.DataFrame(data)

df['CLEANED_POL_NBR']=df.POLICY_NUMBER.str.extract('(\d+)')

【问题讨论】:

    标签: python regex pandas numpy


    【解决方案1】:

    IIUC:

    df[~df.duplicated(['ID','CLEANED_POL_NBR'], keep=False) & df['DISB_AMT'].eq(1)]
    

    输出:

       DISB_AMT   ID POLICY_NUMBER  TYPE CLEANED_POL_NBR
    5         1  892     MSH284989    21          284989
    

    【讨论】:

    • 如果策略编号匹配,那么我们检查两种类型(20 或 21)的 DISB_AMT。如果保单编号不匹配,如果 DISB_AMT=1,我们将检查 TYPE=21。当策略不匹配时,如何添加这个额外的过滤器,即 TYPE=21?
    猜你喜欢
    • 2018-09-19
    • 2020-05-12
    • 2013-07-24
    • 1970-01-01
    • 2019-07-30
    • 2020-04-07
    • 2022-11-24
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多