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

多索引DataFrame跨并行层级的自定义聚合实现需求

问题:折叠多层索引DataFrame并按指定层级聚合最小值

我有一个采用层级结构组织的DataFrame,示例如下:

baseval
indexlevel0 indexlevel1 indexlevel2         
L0-0        L1-0        L2-0               1
                        L2-1               1
                        L2-2              20
            L1-1        L2-0               2
                        L2-1               2
                        L2-2              10

我需要创建一个新的DataFrame,折叠中间层级indexlevel1,将对应indexlevel2的取值替换为原indexlevel1下该层级的baseval最小值。期望结果如下:

minbylevel
indexlevel0 indexlevel2            
L0-0        L2-0                  1
            L2-1                  1
            L2-2                 10

我完全不知道该从何入手,现有的聚合示例都是自底向上执行的。

以下是用于创建初始DataFrame的测试代码:

import pandas as pd
from io import StringIO

testdata = """
indexlevel0,indexlevel1,indexlevel2,baseval
L0-0,L1-0,L2-0,1
L0-0,L1-0,L2-1,1
L0-0,L1-0,L2-2,20
L0-0,L1-1,L2-0,2
L0-0,L1-1,L2-1,2
L0-0,L1-1,L2-2,10
"""
testinput = StringIO(testdata)

data_df = pd.read_csv(testinput, index_col=[0,1,2], header=[0]).sort_index()
print(data_df)

解决方案

直接使用groupby指定需要保留的索引层级,然后对目标列取最小值即可:

# 按指定索引层级分组,计算baseval的最小值并重命名列
result_df = data_df.groupby(level=['indexlevel0', 'indexlevel2'])['baseval'].min().rename('minbylevel')
print(result_df)

代码说明

  • groupby(level=['indexlevel0', 'indexlevel2']):明确指定按这两个索引层级分组,自动忽略中间的indexlevel1层级
  • ['baseval'].min():对分组后的baseval列计算最小值
  • .rename('minbylevel'):将结果列重命名为预期的列名

执行后输出结果与需求完全匹配:

minbylevel
indexlevel0 indexlevel2            
L0-0        L2-0                  1
            L2-1                  1
            L2-2                 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:45:59