数据子组中的群集行

时间:2019-06-12 15:33:23

标签: python pandas scikit-learn pandas-groupby pandas-apply

我在3-d空间中有一个对象成分的数据集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,{ {1}},x)坐标-实现以下目标:

y

例如-zID 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, ID :1 is in A,1, whereas:4在{{1 }} 3. (我打算稍后再连接:Comp)。

我对以下cluster不太满意:

ID

我可以通过在cluster上使用groupby + apply循环来强行使用它,但是我的数据集很大(〜150k 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)) ),我担心资源和时间的限制。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

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)