Python/Pandas - 合并一对多 csv 以进行反规范化

Python/Pandas - merging one to many csv for denormalization

我有一堆从关系数据库中提取的大型 csv 文件。因此,例如,我有 customers.csvaddress.csvcustomer-address.csv 映射关系的键值。我在这里找到了关于如何合并文件的答案:

所以现在我的代码如下所示:

df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
df3 = pd.read_csv(file3)

df = (df3.merge(df1, left_on='CID', right_on='ID')
         .merge(df2, left_on='AID', right_on='ID', suffixes=('','_'))
         .drop(['CID','AID','ID_'], axis=1))
print (df)

现在我注意到我的文件具有一对多关系,上面的代码 pandas 可能会在一个键有多个匹配项时覆盖值。

有没有一种方法可以将具有一对多(多对多)关系的文件连接起来?我正在考虑为每个外键创建一个完整的(冗余的)行。所以基本上是反规范化。

我的问题的答案是执行外连接。使用下面的代码 pandas 为左侧或右侧数据帧中的一个 id 的每次出现创建一个新行,从而创建一个非规范化的 table.

df1.merge(df2, left_on='CID', right_on='ID', how='outer')