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

如何按特定条件去除Pandas DataFrame重复行并保留diast最大值行

解决Pandas DataFrame按连续组保留diast最大值行的问题

需求说明

对DataFrame进行处理:将连续的a、b、c、d列值相同的行视为一组,保留每组中diast列数值最大的行(示例中每组diast呈递增状态,若实际数据无序需先按diast排序)。

示例数据构造

import pandas as pd

data = {
    'age': [29]*12,
    'syst': [90]*12,
    'diast': [57,58,59,60,61,62,63,64,65,66,67,68],
    'a': ['MO','MO','MO','MO','0','0','0','0','MO','MO','MO','MO'],
    'b': ['MO','MO','MO','MO','0','0','0','0','MO','MO','MO','MO'],
    'c': ['0','0','0','0','0','0','0','0','0','0','0','0'],
    'd': ['MO','MO','MO','MO','0','0','0','0','MO','MO','MO','MO']
}
df = pd.DataFrame(data)

实现方法

步骤1:标记连续分组

通过对比当前行与上一行的a/b/c/d列是否存在差异,生成连续分组的唯一标识:

# 生成连续分组的ID
df['group_id'] = df[['a','b','c','d']].ne(df[['a','b','c','d']].shift()).any(axis=1).cumsum()

步骤2:按分组保留diast最大值行

方法一:通用方案(适用于diast无序的场景)

# 获取每组diast最大值对应的行索引
max_idx = df.groupby('group_id')['diast'].idxmax()
# 提取目标结果并移除临时分组列
result = df.loc[max_idx].drop(columns='group_id')

方法二:优化方案(仅适用于diast递增的场景,效率更高)

# 直接取每组最后一行(即diast最大值行)
result = df.groupby('group_id').last().reset_index(drop=True)

结果展示

执行后得到的目标结果如下:

agesystdiastabcd
299060MOMO0MO
2990640000
299068MOMO0MO

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30