Как узнать, существует ли уже строка в фрейме данных в отдельном фрейме данных? - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблемы с поиском этого.Вот пример того, что я хочу, чтобы это произошло

print df

  A | B
0 1   1
1 2   2
2 3   3

print df_2

  A | B
0 1   1
1 2   2

Я хочу, чтобы он возвращал только строки, которые не являются дубликатами в df_2, как показано ниже -

  A | B
2 3   3

Ответы [ 2 ]

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

Вопрос не проясняет, должно ли сравнение быть поэлементным или охватывать фреймы данных.Если есть совпадающие строки, но индекс не выровнен, сравнение с использованием isin () даст ложный результат.

df

    A   B
0   3   3
1   1   1
2   2   2

df2

    A   B
0   1   1
1   2   2

Используйте «внешнее» слияние с индикатором, чтобы найти строки, присутствующие в левом кадре данных,

diff = df.merge(df2, indicator=True, how='outer')
diff.loc[diff['_merge'] == 'left_only', df.columns]

    A   B
0   3   3

Решение с isin вернет,

    A   B
0   3   3
1   1   1
2   2   2

Редактировать:Чтобы ответить на дополнительный вопрос.Если столбец даты в одном из фреймов данных является объектом, сначала преобразуйте его в дату и время, используя

df['date'] = pd.to_datetime(df['date'])
0 голосов
/ 28 февраля 2019

Таким образом, вы можете использовать df.isin() с инвертированной логической маской:

df1[~df1.isin(df2)]

Где:

print(~df1.isin(df2))

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