Python数据帧对大量数据的笛卡尔操作

Python数据帧对大量数据的笛卡尔操作,python,pandas,dataframe,large-data,Python,Pandas,Dataframe,Large Data,我有两个数据帧,都有大约30k行和8列,我需要从第二个df的每一行的值中减去第一个df中每一行的值(以计算每对行之间的欧几里德距离),这可能会导致一个只包含每对行之间差异的3d结构。我尝试过几种方法,但每种方法都需要很长时间才能完成。有没有一种有效的方法可以做到这一点?为了实现价值,您的笛卡尔积可以按如下方式完成: import pandas as pd df1 = pd.DataFrame({'A': [1,2,3]}) df2 = pd.DataFrame({'B': [4,5,6]})

我有两个数据帧,都有大约30k行和8列,我需要从第二个df的每一行的值中减去第一个df中每一行的值(以计算每对行之间的欧几里德距离),这可能会导致一个只包含每对行之间差异的3d结构。我尝试过几种方法,但每种方法都需要很长时间才能完成。有没有一种有效的方法可以做到这一点?

为了实现价值,您的笛卡尔积可以按如下方式完成:

import pandas as pd

df1 = pd.DataFrame({'A': [1,2,3]})
df2 = pd.DataFrame({'B': [4,5,6]})

df3 = pd.merge(df1.assign(key=1), df2.assign(key=1), on='key').drop('key', axis=1)
df3
#   A  B
#0  1  4
#1  1  5
#2  1  6
#3  2  4
#4  2  5
#5  2  6
#6  3  4
#7  3  5
#8  3  6

为了实现价值,您的笛卡尔积可以按如下方式进行:

import pandas as pd

df1 = pd.DataFrame({'A': [1,2,3]})
df2 = pd.DataFrame({'B': [4,5,6]})

df3 = pd.merge(df1.assign(key=1), df2.assign(key=1), on='key').drop('key', axis=1)
df3
#   A  B
#0  1  4
#1  1  5
#2  1  6
#3  2  4
#4  2  5
#5  2  6
#6  3  4
#7  3  5
#8  3  6

如果我理解正确,则生成的数据集将包含900.000.000行

-是计算两个输入集合的每对之间距离的最有效方法之一


如果您需要笛卡尔乘积,请参阅@zipa的答案。

如果我理解正确,您的结果数据集将包含900.000.000行

-是计算两个输入集合的每对之间距离的最有效方法之一


如果您需要笛卡尔产品,请参阅@zipa的答案。

您能分享一个df示例以及您迄今为止的尝试吗?谢谢zipa和MaxU。zipa的解决方案是正确的,但是cdist为我做了。这是快速和整洁。你能分享一个例子,你的df和你已经尝试了迄今为止?谢谢zipa和MaxU。zipa的解决方案是正确的,但是cdist为我做了。它又快又整齐。