将应用到熊猫的groupby()对象的函数的结果分配回groupby()对象

时间:2019-04-22 21:22:58

标签: pandas-groupby sklearn-pandas dbscan

我正在尝试在点数据集上使用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()

dataframe preview

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点的聚类标签。我想将这些群集标签合并到每个组对象中。

这是标签的样子: cluster labels

有什么想法吗?

0 个答案:

没有答案