У меня есть набор данных 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
), и я беспокоюсь о ресурсах и ограниченности времени.Любая помощь будет отличной!