我遇到了这个SQL问题,想知道是否可以用python pandas解决它。
SQL问题: 表格点保存平面中x轴上某些点的x坐标,它们都是整数。
编写查询以查找这些点中两个点之间的最短距离。
| x |
|-----|
| -1 |
| 0 |
| 2 |
我已经按照以下步骤启动了熊猫数据框。
import pandas as pd
point = pd.DataFrame(np.array([-1,0,2]), columns=['x'])
我想做喜欢的事
p1 = point
p2 = point.copy()
p1.merge(p2, on='x', condition = ('!='))
但是我知道没有这样的条件。
任何人都可以在熊猫中解决这个问题吗?
注意:我的问题不同于join two dt when columns are not equal,所以不是重复的。我的问题是将所有值附加到原始集中的每个值。链接中的问题是要找出差异。
答案 0 :(得分:3)
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]
将(rather) efficiently get you a dataframe具有两个坐标的唯一组合,就像外部联接在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
答案 1 :(得分:1)
这是交叉联接后的过滤器
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