pandas两个数据帧交叉连接

Vit*_*Lin 9 python pandas

我找不到任何关于交叉连接的内容,包括合并/加入或其他一些.我需要使用{my function}作为myfunc来处理两个数据帧.相当于:

{
    for itemA in df1.iterrows():
           for itemB in df2.iterrows():
                       t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"])
 }      
Run Code Online (Sandbox Code Playgroud)

相当于:

{
 select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2;
}
Run Code Online (Sandbox Code Playgroud)

但我需要更有效的解决方案:如果使用apply我将是如何实现它们thx; ^^

A.K*_*Kot 19

创建一个共同的"密钥"来交叉加入两个:

df1['key'] = 0
df2['key'] = 0

df1.merge(df2, how='outer')
Run Code Online (Sandbox Code Playgroud)

  • 您还需要在合并语句中使用 on='key' (12认同)
  • 我认为“how”参数对结果没有任何影响。您可以将其省略并使用默认值(即“内部”) (6认同)
  • @A.Kot我明白你的观点,但严格谈论你的代码,使用“how”参数不会产生影响,因为你正在加入一个常量键,它总是匹配,所以“inner”不会消除任何行 (2认同)

ler*_*yJr 10

对于叉积,请参阅此问题

本质上,您必须进行正常的合并,但为每一行提供相同的键以进行连接,以便每一行在帧中相互连接。

然后,您可以通过应用您的函数向新框架添加一列:

new_df = pd.merge(df1, df2, on=key)
new_df.new_col = newdf.apply(lambda row: myfunc(row['A_x'], row['A_y']), axis=1)
Run Code Online (Sandbox Code Playgroud)

axis=1强制跨行.apply工作。如果合并的帧共享一个像您的示例中的列,则 'A_x' 和 'A_y' 将是结果帧中的默认列名称。