Tôi có khung dữ liệu chứa ID nhóm, hai biện pháp khoảng cách (đo lường kinh độ/vĩ độ) và giá trị. Đối với một khoảng cách nhất định, tôi muốn tìm số lượng các nhóm khác gần đó và các giá trị trung bình của các nhóm khác gần đó.Tăng tốc tính toán các nhóm lân cận?
Tôi đã viết mã sau đây, nhưng nó không hiệu quả đến nỗi nó không hoàn thành trong một khoảng thời gian hợp lý cho các tập dữ liệu rất lớn. Việc tính toán của các nhà bán lẻ gần đó là nhanh chóng. Nhưng việc tính giá trị trung bình của các nhà bán lẻ lân cận là cực kỳ chậm. Có cách nào tốt hơn để làm điều này hiệu quả hơn không?
distances = [1,2]
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)),
columns=['Group','Dist1','Dist2','Value'])
# get one row per group, with the two distances for each row
df_groups = df.groupby('Group')[['Dist1','Dist2']].mean()
# create KDTree for quick searching
tree = cKDTree(df_groups[['Dist1','Dist2']])
# find points within a given radius
for i in distances:
closeby = tree.query_ball_tree(tree, r=i)
# put into density column
df_groups['groups_within_' + str(i) + 'miles'] = [len(x) for x in closeby]
# get average values of nearby groups
for idx, val in enumerate(df_groups.index):
val_idx = df_groups.iloc[closeby[idx]].index.values
mean = df.loc[df['Group'].isin(val_idx), 'Value'].mean()
df_groups.loc[val, str(i) + '_mean_values'] = mean
# merge back to dataframe
df = pd.merge(df, df_groups[['groups_within_' + str(i) + 'miles',
str(i) + '_mean_values']],
left_on='Group',
right_index=True)