两个列表的 SQL 样式外连接

SQL-style outer join for two lists

我有来自记录用户事件的平台的数据——无论是对民意调查的回答,还是点击流数据。我试图汇集一些相关的数据集,每个数据集都有一个 session_id 列。

每个数据集都以一个 csv 格式开始,并以一系列嵌套列表的形式读入。并非每个会话都会有用户回答问题或完成某些操作,因此每个数据集 不会 包含每个会话的条目——但是,每个会话至少存在于其中一个数据集。

假设记录了 5 个会话:

例如数据集 1:

会话ID |a |乙 | c | d


1 | × | × | × | x


2 | × | × | × | x


5 | × | × | × | x


例如数据集 2:

会话ID |e | f |克 | h


1 | × | × | × | x


3 | × | × | × | x


5 | × | × | × | x


例如数据集 3:

会话ID |i | j | k | l


2 | × | × | × | x


3 | × | × | × | x


4 | × | × | × | x


我将如何构造这个:

会话ID |a |乙 | c | d |电子 | f |小时 |我 | j | k | l


1 | × | × | × | × | × | × | × | × | - | - | - | -


2 | × | × | × | × | - | - | - | - | × | × | × | x


3 | - | - | - | - | × | × | × | × | × | × | × | x


4 | - | - | - | - | - | - | - | - | × | × | × | x


5 | × | × | × | × | × | × | × | × | - | - | - | -


到目前为止,最简单的方法是将每个 csv 导入 pandas:

merged_df = pd.merge(dataset1, dataset2, how = 'outer', on="sessionID")
pd.merge(merged_df, dataset3, how = 'outer', on="sessionID")

但是要求我不使用任何外部库。

我正在努力寻找一种可行的逻辑来检测 sessionID 中的间隙,然后用空数据填充列表,以便将三个列表简单地加在一起。

有什么想法吗?

你如何定义"external libraries"? sqlite3 属于外部还是内部?

  1. 如果没有,并且您想从关系操作的角度考虑问题,您可以将您的表猛击到一个 sqlite3 文件中,然后从那里获取它。

  2. 如果数据集的数量是有限的,您可以创建一个 class 会话,其中包含一个字典,其中每一列(a 到 j)都是一个键。如果你熟练的话,你可以在需要的时候使用__getattr__函数来使用一个"dot"表示法。对于 "table",我会简单地使用一个字典,将键作为 id,然后分三步(数据集 1、数据集 2、数据集 3)填写你的字典。这样你就不用担心间隙了。