You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas按坐标范围分组并统计合并行数与最大强度?

解决方法

步骤1:展开嵌套坐标

首先得把每个单元格里的嵌套坐标拆成单独行,才能逐个处理坐标。用explode就能轻松实现,它会把列表里的每个元素拆成独立行,同时保留对应的强度值:

import pandas as pd
from sklearn.cluster import DBSCAN

# 示例数据
df = pd.DataFrame({
    'intensity': [620,650,650,700,90],
    "coordinates":[[[30,22]],[[30,23],[29,28]],[[30,23],[29,28]],[[27,28]],[[26,26]]]
})

# 展开坐标列
expanded_df = df.explode('coordinates', ignore_index=True)

展开后的expanded_df结构如下:

intensity coordinates
0        620    [30, 22]
1        650    [30, 23]
2        650    [29, 28]
3        650    [30, 23]
4        650    [29, 28]
5        700    [27, 28]
6         90    [26, 26]

步骤2:提取坐标的x、y值

把坐标列表拆成单独的x和y列,方便后续计算距离:

expanded_df[['x', 'y']] = pd.DataFrame(expanded_df['coordinates'].tolist(), index=expanded_df.index)

步骤3:用DBSCAN聚类分组

要把x、y差值小于3的坐标归为一组,用DBSCAN聚类最适合——它能根据距离自动把相近的点划到同一簇。设置eps=3(欧氏距离小于3的点归为一类),min_samples=1(单个点也能成簇):

# 准备坐标数据
coords = expanded_df[['x', 'y']].values
# 初始化DBSCAN并拟合
dbscan = DBSCAN(eps=3, min_samples=1)
expanded_df['cluster'] = dbscan.fit_predict(coords)

此时expanded_df会新增cluster列,同一簇的坐标会有相同的编号。

步骤4:分组统计并取最大强度

按簇分组,统计每个簇的坐标数量(amount),同时取该簇的最大强度值:

result = expanded_df.groupby('cluster').agg(
    intensity=('intensity', 'max'),
    amount=('coordinates', 'count')
).reset_index(drop=True)

最终结果

运行完上述代码,result就是你需要的输出:

intensity  amount
0        650       3
1        700       4

其中第一个簇包含[30,22], [30,23], [30,23],第二个簇包含[29,28], [29,28], [27,28], [26,26]。


内容的提问来源于stack exchange,提问作者sokkers1193

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:25:01