Дейтафреймы Python Декартовы операции с большим объемом данных - PullRequest
0 голосов
/ 21 мая 2018

У меня есть 2 кадра данных, около 30 тыс. Строк и 8 столбцов, и мне нужно вычесть значения каждой строки в первом df из значений каждой строки во втором df (чтобы вычислить евклидово расстояние между каждой парой строк) что, вероятно, приведет к трехмерной структуре только различий между каждой парой строк.Я перепробовал несколько подходов, но каждый из них занимает очень много времени.Есть ли эффективный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

если я правильно вас понял, ваш результирующий набор данных будет содержать 900.000.000 строк.

scipy.spatial.distance.cdist - это один из наиболее эффективных способов вычисления расстояния между каждой парой из двух наборов входных данных.

Если вам нужендекартово произведение, см. ответ @ zipa.

0 голосов
/ 21 мая 2018

Для чего стоит, ваш декартово произведение может быть сделано следующим образом:

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
...