【发布时间】:2021-03-03 02:45:20
【问题描述】:
我的目标是返回一定半径内点的总计数和平均距离。使用下面,半径的中心是2,中心由X2, Y2确定。
总会有一个点与X2, Y2 位于同一位置。我希望在分析中忽略这一点。
注意:我希望该函数能够及时处理多个时间点。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
'Time' : [1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3],
'Item' : ['A','B','C','D','E','F','A','B','C','D','E','F','A','B','C','D'],
'x' : [4,5,8,3,6,2,6,4,3.5,2,4,6,6,2,4,4],
'y' : [-2,0,-2,0,0,4,-1,-2,-2,4,-3,2,-2,0,-2.5,4],
'X2' : [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],
'Y2' : [-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2],
})
sq_dist = (df['X2'] - df['x']) ** 2 + (df['Y2'] - df['y']) ** 2
# count of points within radius
count = ((sq_dist <= 2 ** 2).astype(int)
.groupby([df['Time']])
.sum()
.reset_index()
.fillna(0)
)
# avg_distance between points within radius
df['dist'] = np.sqrt((df['X2'] - df['x']) ** 2 + (df['Y2'] - df['y']) ** 2)
inside = df[sq_dist <= 2 ** 2].copy()
avg_dist = (inside.groupby(['Time'])['dist']
.mean()
.reset_index()
.fillna(0)
)
如果我合并 count 和 avg_dist 输出应该是:
Time count dist
0 1 0 0.0
1 2 2 0.75
2 3 1 0.5
【问题讨论】:
-
对不起,现在修改了。
-
谢谢,我在 Quang Hoang 的回答中添加了评论。