Python通过两个dataframe用for循环求笛卡尔积

 更新时间:2020年04月29日 09:08:11   作者:何未生  
这篇文章主要介绍了Python通过两个dataframe用for循环求笛卡尔积,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

合并两个没有共同列的dataframe,相当于按行号求笛卡尔积。

最终效果如下

以下代码是参考别人的代码修改的:

def cartesian_df(A,B):
    new_df = pd.DataFrame(columns=list(A).extend(list(B)))
    for _,A_row in A.iterrows():
      for _,B_row in B.iterrows():
        row = A_row.append(B_row)
        new_df = new_df.append(row,ignore_index=True)
    return new_df
#这个方法,如果两张表列名重复会出错

这段代码的思路是对两个表的每一行进行循环,运行速度比较慢,复杂度应该是O(m*n),m是A表的行数,n是B表的行数。

因为我用到的合并表行数比较多,时间太慢,所以针对上面的代码进行了优化。

思路是利用dataframe的merge功能,先循环复制A表,将循环次数添加为列,直接使用merge合并,复杂度应该为O(n)(n是B表的行数),代码如下:

def cartesian_df(df_a,df_b):
  '求两个dataframe的笛卡尔积'
  #df_a 复制n次,索引用复制次数
  new_df_a = pd.DataFrame(columns=list(df_a))
  for i in range(0,df_b.shape[0]):
    df_a['merge_index'] = i
    new_df_a = new_df_a.append(df_a,ignore_index=True)
  #df_b 设置索引为行数
  df_b.reset_index(inplace = True, drop =True)
  df_b['merge_index'] = df_b.index
  #merge
  new_df = pd.merge(new_df_a,df_b,on=['merge_index'],how='left').drop(['merge_index'],axis = 1)
  return new_df

#两个原始表中不能有列名'merge_index'

使用一张8行的表和一张142行的表进行测试,优化前的方法用时:5.560689926147461秒

优化后的方法用时:0.1296539306640625秒(142行的表作为b表)

根据计算原理,将行数少的表放在b表可以更快,测试用时:0.021603107452392578秒(8行的表作为b表)

这个速度已经达到预期,基本感觉不到等待,优化完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 一篇文章带你了解python中的typing模块和类型注解

    一篇文章带你了解python中的typing模块和类型注解

    这篇文章主要为大家详细介绍了python中的类型注解,使用typing模块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • python 函数的详解与应用范例

    python 函数的详解与应用范例

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
    2021-11-11
  • 对python中矩阵相加函数sum()的使用详解

    对python中矩阵相加函数sum()的使用详解

    今天小编就为大家分享一篇对python中矩阵相加函数sum()的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置

    浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置

    这篇文章主要介绍了浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python读取环境变量的方法和自定义类分享

    Python读取环境变量的方法和自定义类分享

    这篇文章主要介绍了Python读取环境变量的方法和自定义类分享,本文直接给出代码实例,需要的朋友可以参考下
    2014-11-11
  • 关于python实现requests接口测试的问题

    关于python实现requests接口测试的问题

    requests是一个很实用的Python HTTP客户端库,Requests是Python语言的第三方的库,专门用于发送HTTP请求,这篇文章主要介绍了python实现requests接口测试,需要的朋友可以参考下
    2021-10-10
  • python输出国际象棋棋盘的实例分享

    python输出国际象棋棋盘的实例分享

    在本篇文章里小编给大家整理的是一篇关于python输出国际象棋棋盘的实例详解,有兴趣的朋友们可以参考下。
    2020-11-11
  • Python里disconnect UDP套接字的方法

    Python里disconnect UDP套接字的方法

    这篇文章主要介绍了Python里disconnect UDP套接字的方法,本文使用的是ctypes绕过的方法,需要的朋友可以参考下
    2015-04-04
  • 如何使用Django默认的Auth权限管理系统

    如何使用Django默认的Auth权限管理系统

    本文主要介绍了如何使用Django默认的Auth权限管理系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Tensorflow2.1 完成权重或模型的保存和加载

    Tensorflow2.1 完成权重或模型的保存和加载

    这篇文章主要为大家介绍了Tensorflow2.1 完成权重或模型的保存和加载,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论