Pandas 中的高效笛卡尔积(CROSS JOIN)
简介:
笛卡尔积,也称为 CROSS JOIN,是数据中的基本操作 分析。在 pandas 中,它涉及将一个 DataFrame 的每一行与另一个 DataFrame 的每一行组合起来。虽然易于理解,但直接计算笛卡尔积的计算成本可能很高,尤其是对于大型数据集。
最佳实践:
1。 “关键”列方法:
此方法非常适合中小型数据集:
def cartesian_product_key(left, right): return left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1)
2。基于 NumPy 的解决方案:
对于较大的数据集,基于 NumPy 的解决方案提供更好的性能:
import numpy as np def cartesian_product(arrays): la = len(arrays) dtype = np.result_type(*arrays) arr = np.empty([len(a) for a in arrays] + [la], dtype=dtype) for i, a in enumerate(np.ix_(*arrays)): arr[...,i] = a return arr.reshape(-1, la)
3.唯一和非唯一索引的广义交叉连接:
此方法可以处理具有任何类型索引的 DataFrame:
def cartesian_product_generalized(left, right): la, lb = len(left), len(right) idx = cartesian_product(np.ogrid[:la], np.ogrid[:lb]) return pd.DataFrame( np.column_stack([left.values[idx[:,0]], right.values[idx[:,1]]]))
4。多数据帧交叉连接:
这扩展了之前处理多个数据帧的方法:
def cartesian_product_multi(*dfs): idx = cartesian_product(*[np.ogrid[:len(df)] for df in dfs]) return pd.DataFrame( np.column_stack([df.values[idx[:,i]] for i,df in enumerate(dfs)]))
5。两个 DataFrame 的简化 CROSS JOIN:
此方法几乎与 @senderle 的 cartesian_product 一样快,对于两个 DataFrame 特别有效:
def cartesian_product_simplified(left, right): la, lb = len(left), len(right) ia2, ib2 = np.broadcast_arrays(*np.ogrid[:la,:lb]) return pd.DataFrame( np.column_stack([left.values[ia2.ravel()], right.values[ib2.ravel()]]))
性能比较:
对这些方法进行基准测试不同的数据集大小表明,对于大型数据集,基于 NumPy 的解决方案始终优于其他解决方案。
结论:
选择正确的方法来计算 pandas 中的笛卡尔积取决于数据集的大小和特征。如果性能是优先考虑的因素,请选择基于 NumPy 的解决方案之一。为了方便和灵活,请考虑“键”列方法或广义的 CROSS JOIN。
以上是如何在 Pandas 中高效地执行笛卡尔积(CROSS JOIN)?的详细内容。更多信息请关注PHP中文网其他相关文章!

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Python3.6环境下加载Pickle文件报错:ModuleNotFoundError:Nomodulenamed...

如何解决jieba分词在景区评论分析中的问题?当我们在进行景区评论分析时,往往会使用jieba分词工具来处理文�...

如何使用正则表达式匹配到第一个闭合标签就停止?在处理HTML或其他标记语言时,常常需要使用正则表达式来�...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)