У меня есть два Pandas кадра данных; давайте назовем одну old_df
, а другую new_df
. Я хочу выделить строки в new_df
, которых нет в old_df
. Так, например:
import pandas as pd
old_df = pd.DataFrame({'m':[1,2,3,4,5,6],
'n':['a','b','c','d','e','f']})
new_df = pd.DataFrame({'m':[2,5,7,8],
'n':['b','e','g','h']})
Эти кадры данных выглядят следующим образом:
m n
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e
5 6 f
и
m n
0 2 b
1 5 e
2 7 g
3 8 h
Я хочу создать маску для new_df
, которая указывает, строка уже существует в old_df
, что-то вроде:
0 True
1 True
2 False
3 False
Мне удалось объединить столбцы в виде строк в одно строковое значение, чтобы получить две серии Pandas, а затем использовать .isin()
на две серии следующим образом:
msk = pd.Series(new_df['m'].astype(str) + new_df['n']).isin(pd.Series(old_df['m'].astype(str) + old_df['n']))
print(msk)
для получения:
0 True
1 True
2 False
3 False
dtype: bool
Это правильный результат, но он слишком уродлив, чтобы быть лучшим ответом. Я думал, что .isin()
может также работать на данных, но я не могу заставить это работать.
Есть предложения?