Итак, у меня есть три таблицы (A, A_to_B, B), одна из которых является таблицей соединений для многих -> многих отношений ... Мне нужно создать информационный кадр, который содержит массив флагов для каждого идентификатора в B (существует ли транзакция в таблице соединений), для каждой строки в A ... Очень сложно объяснить, но ниже приведены примеры таблиц ...
A_to_B A B
+------+------+ +------+------+ +------+------+
| id_a | id_b | | id | val | | id | val |
+------+------+ +------+------+ +------+------+
| 1 | 2 | | 1 | foo | | 1 | foob |
+------+------+ +------+------+ +------+------+
| 1 | 3 | | 2 | bar | | 2 | barb |
+------+------+ +------+------+ +------+------+
| 2 | 3 | | 3 | baz | | 3 | bazb |
+------+------+ +------+------+ +------+------+
И я хочу закончить скадр данных, который выглядит следующим образом
1 2 3
_______________________
1 0 1 1 # id 1 from table A contains entries for ids 2/3 in B
2 0 0 1 # id 2 from table A contains entry for id 3 in B
3 0 0 0 # id 3 contains no transactions in the join table
Надеюсь, это имеет смысл. Кроме того, имейте в виду, что это должен быть эффективный sqlite запрос, поскольку я имею дело с потенциально десятками тысяч строк из каждой таблицы.
Каждая таблица загружена в отдельный фрейм данных, как следует (но, конечно, это никоим образом не является ограничением для решения этой проблемы).
import pandas as pd
import sqlite3
conn = sqlite3.connect('database.sqlite3')
cur = conn.cursor()
df_A = pd.read_sql_query('SELECT * FROM A', conn)
df_B = pd.read_sql_query('SELECT * FROM B', conn)
df_A_to_B = pd.read_sql_query('SELECT * FROM A_to_B', conn)