Этот вопрос может быть связан с объединением или объединением с перезаписью в pandas
Но я имею в виду объединение SQL, а не объединение панд: я ищу эквивалент SQL для таблиц запросов повнешние ключи:
Пример: я хочу выбрать поля из таблицы проекта, чей project_id является внешним ключом в таблице клиентов, client_id которого является внешним ключом в таблице рабочих времен и т. д.
У меня может быть несколько таблиц, и я хочу сделать запрос по внешнему ключу.В моем случае:
import psycopg2 as pg
import pandas.io.sql as psql
# get connected to the database
connection = pg.connect("dbname=my_database user=postgres")
df = psql.read_sql("""SELECT * FROM table.bpartner client
JOIN table.project project ON client.bpartner_id = project.bpartner_id
JOIN table.project_usertime workingtime ON workingtime.project_id = project.project_id
""", connection)
Я заметил, что это дает в выходных дублированных столбцах: например, есть две копии bpartner_id
.
Я удаляю дубликаты столбцов следующим образом:
# remove duplicated columsn > TODO check SQL Join || pandas merge / group_by to handle better
df = df.loc[:, ~df.columns.duplicated()]
В противном случае я мог бы также создать три кадра данных, по одному для каждой таблицы:
df1 = psql.read_sql("SELECT * FROM table.project", connection)
df2 = psql.read_sql("SELECT * FROM table.bpartner", connection)
df3 = psql.read_sql("SELECT * FROM table.project_usertime", connection)
Интересно, каким может быть запрос панд, чтобы теперь объединить три кадра данных без дубликатов столбцов, что эквивалентноSQL-соединение между несколькими таблицами по внешнему ключу - я имею в виду, когда запросы на соединение выражают «деловые отношения» между таблицами (если и только если два объекта связаны между собой).