大熊猫中坐标对之间的距离

时间:2015-06-16 04:43:37

标签: python pandas scipy

找到此pandas数据帧中给定点距离内的点数(行数)的最佳方法是:

    x   y
0   2   9
1   8   7
2   1   10
3   9   2
4   8   4
5   1   1
6   2   3
7   10  5
8   6   6
9   9   7

结果(距离= 3)如下所示:

    x   y   points_within_3
0   2   9   1
1   8   7   4
2   1   10  1
3   9   2   3
4   8   4   5
5   1   1   1
6   2   3   1
7   10  5   4
8   6   6   2
9   9   7   4

更一般地说,我想了解如何使用.transform().apply()以这种方式比较行。 谢谢!

2 个答案:

答案 0 :(得分:1)

这是我使用lambda表达式解决这个问题的方法,但你可以看到scipy函数更快。

from scipy.spatial.distance import squareform, pdist

timeit df.apply(lambda x: sum(((x - df) ** 2).sum(axis=1) ** 0.5 <= 3) - 1, axis=1)
100 loops, best of 3: 5.34 ms per loop

timeit pd.DataFrame(squareform(pdist(df))).apply(lambda x: x[x<=3].count() - 1, axis=1)
100 loops, best of 3: 1.84 ms per loop

答案 1 :(得分:0)

感谢您的评论@jme。

这有效:

df['points_within_3'] = pd.DataFrame(squareform(pdist(df))).apply(
    lambda x: x[x<=3].count() - 1, axis=1
)

但这是最好的方法吗?