Результат деления на ноль, математически говоря, неопределен, который может быть выражен с помощью float / double (поскольку NaN
- а не число), однако он не является неправильным в любом фундаментальном смысле.
Поскольку целое число должно содержать определенное числовое значение, при обработке с ним необходимо обнулить ошибку при делении на ноль.
Это фильтр после перекрестного соединения
p1.assign(key=1).merge(p2.assign(key=1),on='key').loc[lambda x : x['x_x']!=x['x_y']]
Out[29]:
x_x key x_y
1 -1 1 0
2 -1 1 2
3 0 1 -1
5 0 1 2
6 2 1 -1
7 2 1 0
point = [-1, 0, 1]
ix = pd.MultiIndex.from_product([point, point], names=['a', 'b'])
df = pd.DataFrame(index=ix).reset_index()
df = df[df.a != df.b]
(скорее) эффективно получит вам фрейм данных с уникальными комбинациями двух координат, как при внешнем соединении в SQL:
a b
1 -1 0
2 -1 1
3 0 -1
5 0 1
6 1 -1
7 1 0
После этого вы можно получить расстояние с
>>> (df.a - df.b).abs().min()
1