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

多列分组提取最大值并按列展示的Pandas实现方案

问题1:将长格式DataFrame转换为指定宽格式

原始数据

id          sub-id          amount
01            A              100
01            A               50
01            B               10
01            B                5
01            B               50
01            C               10
02            A               25
02            A               10

期望输出

id          sub-id         A_max        B_max      C_max
01            A             100          50         10
02            A             25            0          0

注:共有5种sub-id,每个id下可能存在或不存在部分sub-id,现有代码仅能得到分组最大值,无法转换为目标格式。

实现代码

import pandas as pd

# 假设原始数据已存入df
# 1. 计算每个(id, sub-id)组合的amount最大值,转宽格式并填充缺失值为0
max_wide = df.groupby(['id', 'sub-id'])['amount'].max().unstack(fill_value=0)
# 2. 为列名添加_max后缀
max_wide = max_wide.add_suffix('_max').reset_index()
# 3. 获取每个id对应的第一个sub-id(匹配期望输出的sub-id列规则)
sub_id_first = df.groupby('id')['sub-id'].first().reset_index()
# 4. 合并数据并调整列顺序至目标格式
result = max_wide.merge(sub_id_first, on='id')
result = result[['id', 'sub-id', 'A_max', 'B_max', 'C_max']]

执行后即可得到目标格式,若存在其他sub-id(如D、E),unstack会自动生成对应列并填充0。


问题2:按sub-id分组取各列最大值

原始数据

sub-id         A_max        B_max      C_max
           A             100          50         10
           A             25            0          0
           B             250          10         50
           B             100          50         70

期望输出

sub-id         A_max        B_max      C_max
           A             100          50         10
           B             250          50         70

实现代码

import pandas as pd

# 假设原始数据已存入df
result = df.groupby('sub-id').max().reset_index()

按sub-id分组后对所有数值列取最大值,直接得到目标结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:06