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检测某个变量是否有定义的方法

    python检测某个变量是否有定义的方法

    这篇文章主要介绍了python检测某个变量是否有定义的方法,实例分析了Python常用的变量判定技巧,需要的朋友可以参考下
    2015-05-05
  • Python测试框架pytest介绍

    Python测试框架pytest介绍

    这篇文章主要介绍了Python测试框架pytest介绍,Pytest是一个非常成熟的全功能的python测试框架,有简单灵活易上手、支持参数化等优点,下面其相关内容需要的小伙伴可以参考一下
    2022-03-03
  • 如何使用python获取现在的日期与时间

    如何使用python获取现在的日期与时间

    学习了一段时间的python,不知道大家对于代码的编写有了属于自己的一套思路了呢,下面这篇文章主要给大家介绍了关于如何使用python获取现在的日期与时间的相关资料,需要的朋友可以参考下
    2022-11-11
  • Python基础教程之利用期物处理并发

    Python基础教程之利用期物处理并发

    这篇文章主要给大家介绍了关于Python基础教程之利用期物处理并发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2018-03-03
  • Python实现简单的索引排序与搜索功能

    Python实现简单的索引排序与搜索功能

    这篇文章主要介绍了Python实现简单的索引排序与搜索功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 基于python socketserver框架全面解析

    基于python socketserver框架全面解析

    下面小编就为大家带来一篇基于python socketserver框架全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • NumPy创建数组的多种方式实现

    NumPy创建数组的多种方式实现

    在使用NumPy时,通常需要先创建一个数组,然后再对这个数组进行各种操,本文主要介绍了NumPy创建数组的多种方式实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-06-06
  • python语音识别实践之百度语音API

    python语音识别实践之百度语音API

    这篇文章主要为大家详细介绍了python语音识别实践之百度语音API,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python如何使用turtle库绘制图形

    Python如何使用turtle库绘制图形

    这篇文章主要介绍了Python如何使用turtle库绘制图形,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python 如何去除字符串中指定字符

    python 如何去除字符串中指定字符

    python中的strip()可以去除头尾指定字符,只能删除头尾指定字符,想要去除中间字符,可以使用replace()函数,本文结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-12-12

最新评论