Сопоставление и объединение двух несовместимых фреймов данных - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть два фрейма данных, которые запрашиваются из двух отдельных баз данных, которые имеют общие характеристики, но не всегда одинаковые характеристики, и мне нужно найти способ надежного объединения этих двух.

Как пример:

import pandas as pd
inp = [{'Name':'Jose', 'Age':12,'Location':'Frankfurt','Occupation':'Student','Mothers Name':'Rosy'}, {'Name':'Katherine','Age':23,'Location':'Maui','Occupation':'Lawyer','Mothers Name':'Amy'}, {'Name':'Larry','Age':22,'Location':'Dallas','Occupation':'Nurse','Mothers Name':'Monica'}]
df = pd.DataFrame(inp)
print (df)

   Age   Location Mothers Name       Name Occupation
0   12  Frankfurt         Rosy       Jose    Student
1   23       Maui          Amy  Katherine     Lawyer
2   22     Dallas       Monica      Larry      Nurse



inp2 = [{'Name': '','Occupation':'Nurse','Favorite Hobby':'Basketball','Mothers Name':'Monica'},{'Name':'Jose','Occupation':'','Favorite Hobby':'Sewing','Mothers Name':'Rosy'},{'Name':'Katherine','Occupation':'Lawyer','Favorite Hobby':'Reading','Mothers Name':''}]
df2 = pd.DataFrame(inp2)
print(df2)

  Favorite Hobby Mothers Name       Name Occupation
0     Basketball       Monica                 Nurse
1         Sewing         Rosy       Jose           
2        Reading               Katherine     Lawyer

Мне нужно найти способ надежного объединения этих двух фреймов данных, при этом данные не всегда будут согласованными. Чтобы еще больше усложнить проблему, две базы данных не всегда имеют одинаковую длину. Есть идеи?

1 Ответ

0 голосов
/ 10 ноября 2018

вы можете выполнить слияние по возможным комбинациям столбцов и объединить эти dfs, а затем слить свой новый df с первым (полным) df:

# do your three possible merges on 'Mothers Name', 'Name', and 'Occupation'
# then concat your dataframes
new_df = pd.concat([df.merge(df2, on=['Mothers Name', 'Name']), 
                    df.merge(df2, on=['Name', 'Occupation']),
                    df.merge(df2, on=['Mothers Name', 'Occupation'])], sort=False)

# take the first dataframe, which is complete, and merge with your new_df and drop dups
df.merge(new_df[['Age', 'Location', 'Favorite Hobby']], on=['Age', 'Location']).drop_duplicates()

    Age Location    Mothers Name    Name      Occupation    Favorite Hobby
0   12  Frankfurt      Rosy         Jose       Student        Sewing
2   23  Maui           Amy          Katherine  Lawyer         Reading
4   22  Dallas         Monica       Larry      Nurse          Basketball

Это предполагает, что возраст и местоположение каждой строки уникальны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...