【问题标题】:Sort DataFrame by occurrence in one column, while preserving order in other columns按在一列中的出现对 DataFrame 进行排序,同时保留其他列中的顺序
【发布时间】:2018-05-28 23:58:21
【问题描述】:

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

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

给定以下数据框:

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 和 distance 仍然是有序的

【问题讨论】:

  • 是否在任何列中排序? (哦,我看错了对不起!)
  • @JoseA。不确定我是否理解你。排序后,我希望列 cluster_id 和 distance 仍然按顺序排列,按“cluster_id”的出现排序后
  • 是的,抱歉我看错了问题。

标签: python pandas


【解决方案1】:

我们可以按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

【讨论】:

  • 什么是新列 G?出现次数?
  • @clwen here G=df.groupby('cluster_id').cluster_id.transform('count'),出现次数
  • 这个稳定吗? Documentation 不是很清楚。无论如何,我不知道这是 OP 的意思还是我读错了(再次)。
  • 找到了不同的方式:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2014-11-29
  • 2019-09-24
  • 2021-01-29
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多