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

如何对DataFrame中Hierarchy层级及其子层级分组求和?

多级层级分组求和并保留维度的实现方法

问题场景

  • 现有DataFrame包含Hierarchy、Cost、Type、Region四列
  • 需要按Hierarchy的所有层级(从最顶层到最底层的每个子路径)分组,对Cost求和,同时保留Type、Region维度
  • 特殊情况:如果父层级没有某类Type的直接记录,但子层级存在,父层级的该Type对应Cost要等于所有子层级的总和
  • 原尝试代码df.groupby(grp_df['Hierarchy'].str.split('/').str[0], sort=False).sum().reset_index()只能得到父层级的总Cost,无法按Type、Region拆分

解决思路与代码实现

核心是先把每个完整层级路径拆分成所有父层级+自身的子路径,再按「层级+Type+Region」组合求和。

  1. 导入依赖并准备示例数据
import pandas as pd

# 示例原始数据
df = pd.DataFrame({
    'Hierarchy': ['A/B/C', 'A/B/D', 'B/C', 'B/D/E'],
    'Cost': [10, 20, 15, 5],
    'Type': ['K', 'K', 'M', 'K'],
    'Region': ['North', 'North', 'South', 'East']
})
  1. 拆分层级路径为所有子路径
# 把每个Hierarchy拆分成从顶层到当前层的所有路径
df['all_hierarchies'] = df['Hierarchy'].apply(
    lambda x: ['/'.join(x.split('/')[:i+1]) for i in range(len(x.split('/')))]
)

# 将列表拆分为多行,每个层级对应一行记录
expanded_df = df.explode('all_hierarchies').rename(columns={'all_hierarchies': 'Hierarchy_Level'})
  1. 按层级+Type+Region分组求和
# 分组求和,保留原始顺序
result = expanded_df.groupby(['Hierarchy_Level', 'Type', 'Region'], sort=False)['Cost'].sum().reset_index()

结果说明

执行后会得到每个层级下,对应Type和Region的累计Cost:

  • 比如示例中A层级的Type=K、Region=North的Cost为30(来自A/B/C和A/B/D的Cost之和)
  • 每个子层级的自身记录也会被保留并正确求和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:37