熊猫两个数据框交叉连接[重复]

Posted

技术标签:

【中文标题】熊猫两个数据框交叉连接[重复]【英文标题】:pandas two dataframe cross join [duplicate] 【发布时间】:2016-03-13 17:34:56 【问题描述】:

我找不到任何关于交叉连接的信息,包括合并/连接或其他。 我需要使用 my function 作为 myfunc 处理两个数据框。 相当于:


    for itemA in df1.iterrows():
           for itemB in df2.iterrows():
                       t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"])
       

相当于:


 select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2;

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

【问题讨论】:

你解决了吗?如果您有任何问题,请评论我的回答。 【参考方案1】:

创建一个通用的“密钥”来交叉连接两者:

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

df1.merge(df2, on='key', how='outer')

【讨论】:

这种方法虽然杂乱无章,但在概念上很容易理解!谢谢 合并语句中还需要on='key' 我认为how 参数对结果没有任何影响。你可以忽略它并使用默认值(inner @alejandro OP 专门请求交叉连接,这与外部连接,而不是内部连接。 @A.Kot 我明白你的意思,但严格谈论你的代码,使用how 参数不会影响,因为你加入了一个始终匹配的常量键,所以@987654325 @ 不会消除任何行【参考方案2】:

对于叉积,请参阅this question。

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

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

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

axis=1 强制 .apply 跨行工作。如果合并的框架共享一个列,如上例所示,“A_x”和“A_y”将是结果框架中的默认列名。

【讨论】:

以上是关于熊猫两个数据框交叉连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当两个数据框都包含重复键时,如何将两个熊猫数据框与左连接合并?

两个熊猫数据框的联合

如何合并两个熊猫数据框[重复]

加入两个具有重复值的熊猫数据框[重复]

合并两个数据框而不重复熊猫

合并一个值在另外两个之间的熊猫数据框[重复]