Как убрать из таблицы те строки, которые существуют строки в другой таблице?
Есть два 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)