簡體   English   中英

Pandas:計算 X、Y 分組之間的距離和角度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM