按一列中的出现对DataFrame进行排序,同时保留其他列中的顺序

时间:2017-12-14 19:53:00

标签: python pandas

我想以与此SO问题类似的方式对DataFrame进行排序: Sorting entire csv by frequency of occurence in one column

然而,我遇到的一个问题是计数不保证是唯一的,在这种情况下行将是交错的(我在上面的问题中使用EdChum建议的方法)

给出以下DataFrame:

cluster_id,distance,url
1,0.15,aaa.com
1,0.25,bbb.com
2,0.05,ccc.com
2,0.10,ccc.com
7,0.1,abc.com
7,0.2,def.com
7,0.3,xyz.com

我希望它成为:

cluster_id,distance,url
7,0.1,abc.com
7,0.2,def.com
7,0.3,xyz.com
1,0.15,aaa.com
1,0.25,bbb.com
2,0.05,ccc.com
2,0.10,ccc.com

请注意,按“cluster_id”的出现排序后,列cluster_id和距离仍然有序

1 个答案:

答案 0 :(得分:2)

我们可以按cluster_id和新列'G'排序:

df.assign(G=df.groupby('cluster_id').cluster_id.transform('count')).sort_values(['G','cluster_id'],ascending=[False,True]).drop('G',1)
Out[248]: 
   cluster_id  distance      url
4           7      0.10  abc.com
5           7      0.20  def.com
6           7      0.30  xyz.com
0           1      0.15  aaa.com
1           1      0.25  bbb.com
2           2      0.05  ccc.com
3           2      0.10  ccc.com