如何在没有键的情况下实现 SQL 外连接的 pandas 等价

2024-03-10

在 SQL 中,您可以在没有键的情况下连接两个表,以便两个表的所有记录相互合并。如果pandas.concat() or pandas.merge()或者其他一些 pandas 语法支持这一点,它可以帮助我解决我试图解决的问题的一步。我在帮助文档中找到了一个外部联接选项,但我找不到执行我想要的操作的确切语法(无需键即可联接所有记录)。

为了更好地解释这一点:

import pandas as pd

lunchmenupairs2 = [["pizza", "italian"],["lasagna", "italian"],["orange", "fruit"]]
teamcuisinepreferences2 = [["ian", "*"]]

lunchLabels = ["Food", "Type"]
teamLabels = ["Person", "Type"]

df1 = pd.DataFrame.from_records(lunchmenupairs2, columns=lunchLabels)
df2 = pd.DataFrame.from_records(teamcuisinepreferences2, columns=teamLabels)

print(df1)
print(df2)

输出这些表:

      Food     Type
0    pizza  italian
1  lasagna  italian
2   orange    fruit

  Person     Type
0    ian        *

我希望合并的最终结果是:

  Person     Type Food     Type
0  ian        *   pizza     italian
1  ian        *   lasagna   italian
2  ian        *   orange    fruit

然后,我可以轻松删除不需要的列,并转到我正在处理的代码中的下一步。这不起作用:

merged_data = pd.merge(left=df2,right=df1, how='outer')

有没有办法做到这种类型DataFrame合并?


这是可能的cross-join, Pandas 1.2.0 中引入 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html。只需运行:

df1.merge(df2, how='cross')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有键的情况下实现 SQL 外连接的 pandas 等价 的相关文章

随机推荐