如何在pandas DataFrame中按分组条件删除指定stuck状态行
解决方法
你可以通过分组标记+条件筛选的方式实现需求,代码如下:
1. 构造示例数据
import pandas as pd df = pd.DataFrame( {'name': ['Adam', 'Adam', 'Adam', 'Bill', 'Bill', 'Charlie', 'Charlie', 'Charlie', 'Charlie'], 'message': ['start', 'stuck', 'finish', 'start', 'stuck', 'start', 'stuck', 'finish', 'finish']} )
2. 数据处理
# 标记每个用户是否存在finish记录 df['has_finish'] = df.groupby('name')['message'].transform(lambda x: 'finish' in x.values) # 按规则筛选行,最后删除临时标记列并重置索引 result = df[(~df['has_finish']) | (df['message'] != 'stuck')].drop(columns='has_finish').reset_index(drop=True)
3. 输出结果
执行后result的内容和你预期的输出完全一致:
name message 0 Adam start 1 Adam finish 2 Bill start 3 Bill stuck 4 Charlie start 5 Charlie finish 6 Charlie finish
逻辑说明
- 用
groupby('name')['message'].transform给每个用户的所有行同步打上「是否有finish记录」的标记,避免重复分组计算 - 筛选条件满足任意一个即可保留:
- 该用户没有finish记录,所有行全部保留
- 该用户有finish记录,仅保留message不为stuck的行
内容的提问来源于stack exchange,提问作者user270199
相关产品推荐
相关产品推荐

