Python dataframes 对大量数据进行笛卡尔运算
Python dataframes Cartesian operation on large amount of data
我有 2 个数据帧,都有大约 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
如果我理解正确的话,你得到的数据集将包含 900.000.000 行。
scipy.spatial.distance.cdist - 是计算两个输入集合中每对之间距离的最有效方法之一。
如果您需要笛卡尔积,请参阅@zipa 的回答。
我有 2 个数据帧,都有大约 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
如果我理解正确的话,你得到的数据集将包含 900.000.000 行。
scipy.spatial.distance.cdist - 是计算两个输入集合中每对之间距离的最有效方法之一。
如果您需要笛卡尔积,请参阅@zipa 的回答。