Как убрать из таблицы те строки, которые существуют строки в другой таблице?

Есть два dataframe:

  Reg_x    name BS_name Sector_name Reg_y   tac
0    IR  IR1400  IR1400  IR1400_053    IR  5286
1    IR  IR1397  IR1397  IR1397_053    IR  5286
  Reg    name BS_name Sector_name
0  IR  IR1400  IR1400  IR1400_053
1  IR  IR1400  IR1400  IR1400_052
2  IR  IR1400  IR1400  IR1400_051
3  IR  IR1397  IR1397  IR1397_053
4  IR  IR1397  IR1397  IR1397_052
5  IR  IR1397  IR1397  IR1397_051
3  IR  IR1307  IR1307  IR1307_053
4  IR  IR1307  IR1307  IR1307_052
5  IR  IR1307  IR1307  IR1307_051

Как мне из второй таблицы сохранить те name, которые не существуют в первой таблице? такую таблицу нужно получить в данном случае:

  Reg    name BS_name Sector_name
0  IR  IR1307  IR1307  IR1307_053
1  IR  IR1307  IR1307  IR1307_052
2  IR  IR1307  IR1307  IR1307_051

Я думал через список можно это реализовать и потом сравнить и отфильтровать их:

cesList = ces4gNokTable['name'].tolist()
    cesList = list(dict.fromkeys(cesList))
    print("Список (cesList) c незаполненными данными в CES 4G Nokia:")
    print(cesList)
    oldList = old4gTable['name'].tolist()
    oldList = list(dict.fromkeys(oldList))
    print("Список (oldList) c довесами 4G Nokia:")
    print(oldList)

но думаю что есть каие то решения лучше через pandas


Ответы (2 шт):

Автор решения: CrazyElf

Как-то так:

df3 = df2[~df2['name'].isin(df1['name'])]

Пояснения:

  • df[условие] - фильтрация по условию
  • isin - проверка на вхождение
  • ~ - отрицание условия
→ Ссылка
Автор решения: Oopss
import pandas as pd
from io import StringIO


data = """Reg_x,name,BS_name,Sector_name,Reg_y,tac
IR,IR1400,IR1400,IR1400_053,IR,5286
IR,IR1397,IR1397,IR1397_053,IR,5286"""
data2 = """Reg,name,BS_name,Sector_name
 IR,IR1400,IR1400,IR1400_053
 IR,IR1400,IR1400,IR1400_052
 IR,IR1400,IR1400,IR1400_051
 IR,IR1397,IR1397,IR1397_053
 IR,IR1397,IR1397,IR1397_052
 IR,IR1397,IR1397,IR1397_051
 IR,IR1307,IR1307,IR1307_053
 IR,IR1307,IR1307,IR1307_052
 IR,IR1307,IR1307,IR1307_051"""

df = pd.read_csv(StringIO(data), header=0)
df2 = pd.read_csv(StringIO(data2), header=0)

udf = df['name'].unique() #Убрать повторяющиеся имена, сохранить результат
print(udf)

df3 = df2[~df2['name'].isin(udf)] #Отфильтровать имена которые не в udf
df3 = df3.reset_index(drop=True)

print(df3)

['IR1400' 'IR1397']
   Reg    name BS_name Sector_name
0   IR  IR1307  IR1307  IR1307_053
1   IR  IR1307  IR1307  IR1307_052
2   IR  IR1307  IR1307  IR1307_051

Еще вариант через запрос:

df4 = df2.query("name not in @udf")
df4 = df4.reset_index(drop=True)
print(df4)

→ Ссылка