我有一个DataFrame看起来像这样
cluster_id,distance,url
0,0.1,abc.com
0,0.05,def.com
0,0.3,xyz.com
1,0.15,aaa.com
1,0.25,bbb.com
1,0.05,ccc.com
我想做的是找到每个群集的最小距离,并新建一个名为centroid_url的列:
cluster_id,distance,url,centroid_url
0,0.1,abc.com,def.com
0,0.05,def.com,def.com
0,0.3,xyz.com,def.com
1,0.15,aaa.com,ccc.com
1,0.25,bbb.com,ccc.com
1,0.05,ccc.com,ccc.com
我可以想到这样做的某种丑陋方法(对于每个可能的cluster_id,在for循环中找到最小值),但是我想知道这样做的一种更优雅的方法。谢谢。
达蒙:
In [29]: df['centroid_url'] = df.loc[df.groupby('cluster_id')['distance']
.transform('idxmin'), 'url'] \
.values
In [30]: df
Out[30]:
cluster_id distance url centroid_url
0 0 0.10 abc.com def.com
1 0 0.05 def.com def.com
2 0 0.30 xyz.com def.com
3 1 0.15 aaa.com ccc.com
4 1 0.25 bbb.com ccc.com
5 1 0.05 ccc.com ccc.com
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句