Python - поиск значения в кадре данных для того же идентификатора - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий кадр данных, как показано ниже

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     

Я пытаюсь сгруппировать по идентификатору и извлечь номер политики и выполнить поиск в другом ТИПЕ, например: (TYPE = 20 или 21), если номер политики одинаков для обоих типов TYPE для идентификатора, а затем проверьте, что DISB_AMT> 1 в двух строках. Если значение равно true, не добавляйте его к кадру данных.

Например: ID 738 имеет одинаковый номер политики MSH39990 в обеих строках. Я написал скрипт для извлечения только чисел, чтобы его было легче сравнивать. ID 738 имеет тот же номер политики. Теперь мы проверяем, если DISB_AMT> 1. В первой строке это не> 1. Во втором ряду мы имеем 3848> 1. Не включайте этот идентификатор в результат. Для идентификатора 892, поскольку НОМЕР ПОЛИТИКИ не совпадает в обоих ТИПАХ, мы проверяем, только если DISB_AMT> 1 для ТИПА 21. Поскольку это не> 1, мы добавляем эту строку в фрейм данных результатов.

Как мне сравнить с другим типом и проверьте, совпадает ли номер политики, и постройте остальную часть лога c?

Ожидаемый результат

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+)')

1 Ответ

1 голос
/ 17 апреля 2020

IIU C:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...