![](/img/trans.png)
[英]How do I calculate the distance between a set x, y coordinate and location variables?
[英]Pandas: Calculate Distance and Angle between X, Y groupped
好吧,我有以下列:
Id PlayId X Y
0 0 2.3 3.4
1 0 5.4 3.2
2 1 3.2 5.1
3 1 4.2 1.7
如果我有兩行按一個 PlayId 分組,我想添加兩列距離和角度:
Id PlayId X Y Distance_0 Distance_1 Angle_0 Angle_1
0 0 2.3 3.4 0.0 ? 0.0 ?
1 0 5.4 3.2 ? 0.0 ? 0.0
2 1 3.2 5.1
3 1 4.2 1.7
每個距離列都描述了組中第 i 個和第 j 個元素之間的歐幾里得距離:
dist(x0, x1, y0, y1) = sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2)
類似地,計算第 i 個和第 j 個元素之間的角度。
那么,如何在不逐個處理元素的情況下有效地執行此操作?
您可以使用來自 SciPy 的pdist
function 計算成對距離:
df = pd.DataFrame({'X': [5, 6, 7], 'Y': [3, 4, 5]})
# df
# X Y
# 0 5 3
# 1 6 4
# 2 7 5
from scipy.spatial.distance import pdist, squareform
cols = [f'Distance_{i}' for i in range(len(df))]
pd.DataFrame(squareform(pdist(df.values)), columns=cols)
產生以下 DataFrame:
Distance_0 Distance_1 Distance_2
0 0.000000 1.638991 2.828427
1 1.638991 0.000000 1.638991
2 2.828427 1.638991 0.000000
這是可行的,因為pdist
采用大小為 m * n 的數組,其中 m 是觀察的數量(=行),n 是所述觀察的維度(在這種情況下:兩個 - X 和 Y)
如果需要,您可以隨后將原始 DataFrame 與新創建的連接(使用pd.concat
)。
對於角度,您也可以使用pdist
,使用metric='cosine'
來計算余弦距離。 有關更多信息,請參閱此帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.