Строки кластера в подгруппах данных - PullRequest
0 голосов
/ 12 июня 2019

У меня есть набор данных df компонентов объекта в трехмерном пространстве - каждый ID представляет объект, который имеет различные компоненты:

ID   Comp   x        y        z
A    1      2        2        1     
A    2      2        1        -1
A    3      -10      1        -10
A    4      -1       3        -5
B    1      3        0        0
B    2      3        0        -5
...

Я хотел бы просмотреть все IDиспользование метода кластеризации в sklearn для создания кластеров компонентов (Comp) на основе координат каждого компонента (x, y, z) - для достижения чего-то подобного:

ID   Comp   x        y        z        cluster
A    1      2        2        1        1
A    2      2        1        -1       1
A    3      -10      1        -10      2
A    4      -1       3        -5       3
B    1      3        0        0        1
B    2      3        0        -5       1
...

Как пример - ID: A, Комп :1 is in кластер 1, whereas ID : A, Comp: 4 в cluster 3. (я планирую тогдаобъединить ID и cluster позже).

Мне не повезло со следующим groupby + apply:

from sklearn.cluster import AffinityPropagation
ap = AffinityPropagation()

df['cluster']=df.groupby(['ID','Comp']).apply(lambda x: ap.fit_predict(np.array([x.x,x.y,x.z]).T))

Я мог бы перебить его, используяfor цикл по ID, но мой набор данных большой (~ 150k ID), и я беспокоюсь о ресурсах и ограниченности времени.Любая помощь будет отличной!

1 Ответ

1 голос
/ 12 июня 2019

IIUC, я думаю, вы могли бы попробовать что-то вроде этого:

def ap_fit_pred(x):
    ap = AffinityPropagation()
    return pd.Series(ap.fit_predict(x.loc[:,['x','y','z']]))

df['cluster'] = df.groupby('ID').apply(ap_fit_pred).reset_index(drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...