Pandas DataFrame排序:将重复行移至分组末尾实现交错排布
实现交错排序的方案
核心思路
直接用sort_values无法实现交错效果,因为默认排序会将同值的行全部聚合到一起。你需要新增一个辅助排序字段:标记每个相同值在所属分组内的出现顺序,再基于辅助字段实现交错排序。
pandas DataFrame实现代码
第一步:构造示例数据
import pandas as pd data = { "columnA": ["A","A","A","A","B","B","B","B"], "columnB": ["a","a","b","b","a","a","b","b"], "columnC": [1,1,2,2,1,1,2,2] } df = pd.DataFrame(data)
第二步:实现交错排序
# 生成辅助列:标记每个columnC值在对应columnA分组内的第几次出现 df["sort_aux"] = df.groupby(["columnA", "columnC"]).cumcount() # 按优先级排序:先按columnA固定大分组,再按辅助列的出现顺序,最后按columnC实现同顺序内的交错 df = df.sort_values(by=["columnA", "sort_aux", "columnC"]).drop(columns="sort_aux")
运行后输出的df和你需要的目标格式完全一致。
基础数值列表的交错排序实现
如果是简单的数值列表[1,1,2,2,3,3],也可以用同样逻辑实现:
from collections import defaultdict lst = [1,1,2,2,3,3] count_map = defaultdict(int) # 统计每个值的出现次数 for num in lst: count_map[num] += 1 res = [] # 按出现层级拼接 for order in range(max(count_map.values())): for val in sorted(count_map.keys()): if order < count_map[val]: res.append(val) print(res) # 输出 [1,2,3,1,2,3]
内容的提问来源于stack exchange,提问作者Carey
相关产品推荐
相关产品推荐

