TMW*_*MWP 4 python merge join dataframe
在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)
Run Code Online (Sandbox Code Playgroud)
输出这些表:
Food Type
0 pizza italian
1 lasagna italian
2 orange fruit
Person Type
0 ian *
Run Code Online (Sandbox Code Playgroud)
我希望合并的最终结果是:
Person Type Food Type
0 ian * pizza italian
1 ian * lasagna italian
2 ian * orange fruit
Run Code Online (Sandbox Code Playgroud)
然后,我可以轻松删除不需要的列,并转到我正在处理的代码中的下一步。这不起作用:
merged_data = pd.merge(left=df2,right=df1, how='outer')
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以进行这种DataFrame
合并?
这是可能的cross-join
,在 Pandas 1.2.0 中引入。只需运行:
df1.merge(df2, how='cross')
Run Code Online (Sandbox Code Playgroud)
您可以在两个df中添加一个具有恒定值的列,
>>>df1['joincol'] = 1
>>>df2['joincol'] = 1
>>>pd.merge(left=df2,right=df1, on='joincol', how='outer')
Person Type_x joincol Food Type_y
0 ian * 1 pizza italian
1 ian * 1 lasagna italian
2 ian * 1 orange fruit
Run Code Online (Sandbox Code Playgroud)
然后在删除其他不希望的列时将其删除。