【发布时间】:2017-10-27 08:52:12
【问题描述】:
在 SQL 中,您可以在没有键的情况下连接两个表,以便两个表的所有记录相互合并。如果pandas.concat() 或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?在 Python 中,这可以通过vals=[(x,y) for x in list1 for y in list2]non-Pandasically 来完成 -
我有一个版本的代码根本不使用数据帧。它使用数据作为列表,并使用循环和列表推导来解决它。然后我对如果我在数据帧上使用 SQL 之类的连接来生成数据并将结果作为数据帧输出会怎样?到目前为止,根据这里的帖子来解决答案,现在看起来很有希望。但是你的评论是一个有用的代码,可以不同地给猫换皮(产生嵌套列表输出)。感谢分享。
-
我还不知道 Python 中通过 pandas 的
cross join功能,但会密切关注线程! -
交叉连接可能是一个不同但相关的概念。看看我在这里接受的答案。它解决了我问的实际问题。谢谢你的评论。我只是基于它建模了一些东西来解决我正在处理的代码的另一部分。 :-)
标签: python join dataframe merge