Присвойте результаты функции, примененной к объектам pandas groupby (), обратно объекту groupby () - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь использовать функцию 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

Есть идеи?

...