【问题标题】: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;^^

【问题讨论】:

  • 你解决了吗?如果您有任何问题,请评论我的回答。

标签: python pandas


【解决方案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”将是结果框架中的默认列名。

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 2021-07-02
    • 2021-07-29
    • 1970-01-01
    • 2019-12-28
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多