我正在尝试在点数据集上使用sklearn的dbscan函数。点数据集包含多个熊的gps信标数据。我想对每个单独的熊应用dbscan函数。我使用pandas groupby()方法来执行此操作。
最终,我想以原始数据框结束,该数据框的每个群集标签都有一个新列。
问题:我不知道如何将pandas.series对象中的标签与groupby()对象合并。
代码如下:
import pandas as pd, numpy as np, matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from geopy.distance import great_circle
from shapely.geometry import MultiPoint
df = pd.read_csv(r"D:\PolarBear.csv")
df.head()
df = df[pd.notnull(df["Latitude"])]
uniqueId = df.groupby("Bear")
def grp_func(df):
kms_per_radian = 6371.0088
epsilon = 1.5 / kms_per_radian
coords = df.as_matrix(columns=['Latitude', 'Longitude'])
db = DBSCAN(eps=epsilon, min_samples=100, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
cluster_labels = db.labels_
return cluster_labels
test = uniqueId.apply(grp_func)
这将返回组中每个X,Y点的聚类标签。我想将这些群集标签合并到每个组对象中。
这是标签的样子:
有什么想法吗?