如何按整体最高计数排序Pandas分组后的结果?
解决方法
要实现让总count最高的col1组排在最前面,同时每个col1组内按count降序排列,可以按以下步骤操作:
- 先完成基础的分组统计,得到每个
(col1, col2)组合的count:
df = test.groupby(["col1", "col2"])["col4"].count().reset_index(name="count")
- 新增一列计算每个col1的总count,用来作为整体排序的依据:
df["col1_total"] = df.groupby("col1")["count"].transform("sum")
- 按照col1的总count降序、组内count降序排序,最后删除辅助列:
result = df.sort_values(["col1_total", "count"], ascending=[False, False]).drop("col1_total", axis=1)
执行后得到的结果就是你想要的:
col1 col2 count 1 8 b 4 0 8 a 1 2 2 a 3 3 2 b 1 4 3 a 1 5 3 b 1
如果想固定让col1为"8"的组强制排在最前面(不管它的总count),也可以用自定义排序键:
# 自定义排序规则:"8"排第一,其他col1按总count降序 df["sort_key"] = df["col1"].apply(lambda x: 0 if x == "8" else df[df["col1"] == x]["count"].sum()) result = df.sort_values(["sort_key", "count"], ascending=[True, False]).drop("sort_key", axis=1)
不过第一种方法更通用,能自动根据总count调整col1组的顺序。
内容的提问来源于stack exchange,提问作者franco mango
相关产品推荐
相关产品推荐

