多列分组提取最大值并按列展示的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
相关产品推荐
相关产品推荐

