возможно ли сделать эквивалент вложенных запросов SQL в pandas dataframe? - PullRequest
0 голосов
/ 01 февраля 2019

можно сделать в кадре данных Pandas эквивалент этого кода SQL

delete * from tableA where id in (select id from tableB)

Ответы [ 2 ]

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

Да, есть эквивалент.Вы можете попробовать это:

df2.drop(df2.loc[df2['id'].isin(df1['id'])].index)

Например:

df1 = pd.DataFrame({'id': [1,2,3,4], 'value': [2,3,4,5]})
df2 = pd.DataFrame({'id': [1,2,3,4, 5,6,7], 'col': [2,3,4,5,6,7,8]})
print(df2.drop(df2.loc[df2['id'].isin(df1['id'])].index))

Вывод:

   id  col
4   5    6
5   6    7
6   7    8

Я просто взял случайный пример кадра данных.В этом примере отбрасываются значения из df2 (который можно назвать TableA) с использованием df1 (или TableB)

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

Не знаю точную структуру ваших DataFrames, но что-то вроде этого должно сделать это:

# Setup dummy data:
import pandas as pd
tableA = pd.DataFrame(data={"id":[1, 2, 3]}) 
tableB = pd.DataFrame(data={"id":[3, 4, 5]})

# Solution:
tableA = tableA[~tableA["id"].isin(tableB["id"])]
...