Python实现DataFrame仅相邻行按BS分组并统计ERROR极值的方法
解决方案
核心思路是通过对比当前行和上一行BS列的取值,生成连续分组的唯一标识,再基于该标识做聚合统计即可,完整实现代码如下:
import pandas as pd # 构造原始数据集 data = { 'ID': [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20], 'VAL': [0,1,1,0,11,10,12,11,9,30,31,29,10,9,8,11,0,1,2,9,10], 'BS': [0,0,0,0,10,10,10,10,10,30,30,30,10,10,10,10,0,0,0,10,10], 'ERROR': [0,1,1,0,1,0,2,1,-1,0,1,-1,0,-1,-2,1,0,1,2,-1,0] } df = pd.DataFrame(data) # 生成连续分组标识:当前行BS与上一行不同时分组号+1 df['group_id'] = (df['BS'] != df['BS'].shift()).cumsum() # 按分组标识聚合,统计对应字段 result = df.groupby('group_id').agg( BS=('BS', 'first'), MIN=('ERROR', 'min'), MAX=('ERROR', 'max') ).reset_index(drop=True).rename_axis('ID').reset_index() print(result)
输出结果
运行上述代码得到的结果和预期完全一致:
ID BS MIN MAX 0 0 0 0 1 1 1 10 -1 2 2 2 30 -1 1 3 3 10 -2 1 4 4 0 0 2 5 5 10 -1 0
内容的提问来源于stack exchange,提问作者Lidbey
相关产品推荐
相关产品推荐

