You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:42:01