Как добавить только строки из одного фрейма данных в другой, где значения не совпадают в определенных столбцах - PullRequest
0 голосов
/ 06 августа 2020

У меня есть два фрейма данных, df1 и df2 (показано ниже), и мне нужен df3. Таким образом, если в столбце «Complete» == 'C' появляются дубликаты, удалите строку из df1, в противном случае оставьте строки df1 и добавьте оставшиеся строки из df2. Надеюсь, это имеет смысл! Может быть простой способ сделать это, и я просто делаю звук более сложным, чем он есть на самом деле!?

df1:

Complete    Name      Birth
C           Steve     13/07/2000
C           Mike      13/06/2000
C           Sarah     20/05/1936
C           Lewis     14/08/1955
NaN         Martin    15/04/1990
NaN         Lewis     15/04/1990


df2:

Complete    Name      Birth
NaN         Steve     13/07/2000
NaN         Mike      13/06/2000
NaN         Sarah     20/05/1936
NaN         Lewis     14/08/1955
NaN         Martin    15/04/1990
NaN         Lewis     15/04/1990
NaN         Dave      13/04/1935
NaN         Mark      14/07/1932
NaN         Steve     15/06/1970

Я sh, чтобы df1 стал таким:

Complete    Name      Birth
NaN         Martin    15/04/1990
NaN         Lewis     15/04/1990
NaN         Dave      13/04/1935
NaN         Mark      14/07/1932
NaN         Steve     15/06/1970

1 Ответ

0 голосов
/ 06 августа 2020
# merge both dataframes, 2 tricks, .reset_index()...set_index() will keep the original index and not reset him
# trick 2, use indicator=True which creates the column "_merge" where you can see in which dataframe the rows where found, left, right or both
df = df1.reset_index().merge(df2, on=["Complete", "Name", "Birth"], how="left", indicator=True).set_index("index")
# creates a mask (series with True / False values)
mask = (df["_merge"]=="both") & (df["Complete"] == "C")
# only keep rows where mask == True, the "~" inverts the boolean value, therefore excludes the mask
df = df[~mask]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...