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

如何按层级关联规则对Pandas DataFrame进行排序?

解决方法

要实现你需要的层级联动排序,核心是给每行生成对应的完整层级路径,再按路径排序即可。具体步骤如下:

  1. 为每行生成path列,路径规则为:父级路径 + "/" + 当前Level(顶层Saga的路径就是自身Level)
  2. 按path列排序后,就能得到父级紧跟子级的树形排序效果

完整代码示例

import pandas as pd

# 你的原始DataFrame
data = {
    'Level': ['A1', 'B4', 'C', 'C', 'B3', 'C', 'C', 'C', 'C', 'A2', 'B1', 'C', 'C', 'C', 'B2', 'C', 'C', 'C'],
    'Parent': [None, 'A2', 'B1', 'B1', 'A2', 'B2', 'B2', 'B1', 'B2', None, 'A1', 'B2', 'B2', 'B3', 'A1', 'B4', 'B4', 'B4'],
    'Type': ['Saga', 'Epic', 'Story', 'Story', 'Epic', 'Story', 'Story', 'Story', 'Story', 'Saga', 'Epic', 'Story', 'Story', 'Story', 'Epic', 'Story', 'Story', 'Story']
}
df = pd.DataFrame(data)

# 构建Level到路径的映射字典
level_path_map = {}

# 先处理顶层Saga(Parent为None)
saga_rows = df[df['Parent'].isna()]
for _, row in saga_rows.iterrows():
    level_path_map[row['Level']] = row['Level']

# 处理中间层Epic,路径为父级Saga的路径 + 当前Level
epic_rows = df[df['Type'] == 'Epic']
for _, row in epic_rows.iterrows():
    parent_path = level_path_map[row['Parent']]
    level_path_map[row['Level']] = f"{parent_path}/{row['Level']}"

# 处理底层Story,路径为父级Epic的路径 + 当前Level
df['path'] = df.apply(
    lambda x: f"{level_path_map[x['Parent']]}/{x['Level']}" if x['Type'] == 'Story' else level_path_map.get(x['Level'], ''),
    axis=1
)

# 按路径排序,然后删除临时的path列
sorted_df = df.sort_values('path').drop('path', axis=1)

print(sorted_df)

排序后结果

Level Parent   Type
0     A1   None   Saga
10    B1     A1   Epic
2      C     B1  Story
3      C     B1  Story
7      C     B1  Story
14    B2     A1   Epic
5      C     B2  Story
6      C     B2  Story
8      C     B2  Story
11     C     B2  Story
12     C     B2  Story
9     A2   None   Saga
4     B3     A2   Epic
13     C     B3  Story
1     B4     A2   Epic
15     C     B4  Story
16     C     B4  Story
17     C     B4  Story

这个结果完全符合你的要求:

  • 顶层Saga(A1、A2)优先排序
  • 每个Saga后紧跟其下属的Epic(B1、B2属于A1;B3、B4属于A2)
  • 每个Epic后直接紧跟其下属的所有Story(C行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:22