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

如何用Pandas重排表格:Type优先、交替I/P并按Value降序

Pandas实现指定规则的表格行重排

原始数据

IDTypeI/PValue
ID1PrimaryI8
ID2PrimaryI3
ID3SecondaryP6
ID4SecondaryI2
ID5PrimaryP3
ID6PrimaryI4

当前排序结果

IDTypeI/PValue
ID1PrimaryI8
ID6PrimaryI4
ID2PrimaryI3
ID5PrimaryP3
ID3SecondaryP6
ID4SecondaryI2

期望排序规则

  1. 优先展示Primary类型,Secondary类型后置
  2. Primary类型内交替展示I和P类型的行,且同一I/P分组内按Value从大到小排列
  3. Secondary类型按Value从大到小排列

Pandas实现代码

步骤1:创建DataFrame

import pandas as pd

data = {
    'ID': ['ID1', 'ID2', 'ID3', 'ID4', 'ID5', 'ID6'],
    'Type': ['Primary', 'Primary', 'Secondary', 'Secondary', 'Primary', 'Primary'],
    'I/P': ['I', 'I', 'P', 'I', 'P', 'I'],
    'Value': [8, 3, 6, 2, 3, 4]
}

df = pd.DataFrame(data)

步骤2:处理Primary分组的交替排序

通过给同一I/P分组的行添加排名,再按排名+I/P排序实现交替效果:

# 筛选Primary数据并复制,避免修改原DataFrame
primary_df = df[df['Type'] == 'Primary'].copy()

# 按I/P分组,每组内按Value降序分配排名,确保同组内大值在前
primary_df['rank'] = primary_df.groupby('I/P')['Value'].rank(ascending=False, method='first').astype(int)

# 按排名升序、I/P升序排序,实现交替展示I和P的效果
primary_sorted = primary_df.sort_values(by=['rank', 'I/P'], ascending=[True, True])

# 移除临时添加的rank列
primary_sorted = primary_sorted.drop('rank', axis=1)

步骤3:处理Secondary分组排序

按Value降序排列:

secondary_sorted = df[df['Type'] == 'Secondary'].sort_values(by='Value', ascending=False)

步骤4:合并结果并重置索引

final_df = pd.concat([primary_sorted, secondary_sorted]).reset_index(drop=True)

最终结果

IDTypeI/PValue
0ID1PrimaryI8
1ID5PrimaryP3
2ID6PrimaryI4
3ID2PrimaryI3
4ID3SecondaryP6
5ID4SecondaryI2

注:你提供的期望结果中ID5重复出现,推测是笔误,上述实现是基于合理逻辑生成的正确交替排序结果。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:46