【发布时间】:2019-11-04 19:31:28
【问题描述】:
所以我有三个表(A、A_to_B、B),其中一个是用于多->多关系的连接表......我需要创建一个数据框,其中包含 B 中每个 id 的标志数组(连接表中是否存在事务),对于 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)
【问题讨论】:
-
那你是用sql还是python操作呢?
-
我不在乎,只要速度快,最后我有一个 pandas DataFrame
标签: python sql pandas sqlite dataframe