Найти несоответствующие пары в 2-х фреймах данных и создать новый отсутствующий фрейм данных Python - PullRequest
0 голосов
/ 28 января 2019

У меня есть два неровных кадра данных, которые имеют все одинаковые переменные, за исключением пары значений ID, которые варьируются от одного к другому.

Например, один из кадров данных, df1 выглядит следующим образом:

Name     Name ID     State     Gen ID      Unit ID
Nikki    9           AZ        1-1         1
Nikki    9           AZ        1-2         2
Nikki    9           AZ        1-3         3
Mondip   101         NY        1A          1A
Mondip   101         NY        1B          1B
James    11          CA        12-1        12
James    11          CA        13-1        13
Sandra   88          NJ        1           1
.
.
.

Другой кадр данных df2 выглядит следующим образом:

Name         Name ID     State     Unit ID
Monte        97          PA        4-1         
Monte        97          PA        4-2         
Nikki Ltd    9           AZ        1        
Nikki Ltd    9           AZ        2        
Mondip       101         NY        1A         
Mondip       101         NY        1B         
James        11          CA        12-1          
James        11          CA        13-1          
.
.
.

Как видно, столбцы Gen ID и Unit IDкак-то связано.Иногда Unit ID в df2 может быть либо Gen ID, либо Unit ID в df1.

. Я хочу создать новый фрейм данных или список из каждого набора Name, Name ID и State, которые не не соответствуют df1 и df2.Иногда имя слегка совпадает с Nikki и Nikki Ltd, поэтому мне нужно позаботиться об этом, используя Name ID.

Например, вывод нового кадра данных df_missing будет:

Name         Name ID     State     Gen ID      Unit ID
Monte        97          PA                    4-1         
Monte        97          PA                    4-2 
Sandra       88          NJ        1           1

Есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 28 января 2019

Если предположить, что вы можете идентифицировать имена, которые достаточно близки, то первым шагом будет замена экземпляров «Nikki LTD» на «Nikki».Как только вы это сделаете, просто определить имена, которые не являются взаимными для каждого фрейма данных.Эти имена

 merged_df = pd.concat([df1, df2])
 s1 = set(df1['Name'].unique())
 s2 = set(df2['Name'].unique())
 # read as every in s1 thats not in s2 and everyone in s2 thats not in s1
 mutually_distinct_names = list((s1 - s2).union(s2 - s1)) 
 missing_df = merged_df[merged_df['Name'].isin(muutally_distinct_names)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...