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

如何移除DataFrame中存在status_id=1的用户的所有行

嘿,这个需求很明确——要把所有曾经有过status_id=1记录的用户的行全部删掉,只留下从来没出现过status_id=1的用户的所有数据对吧?下面给你几种实用的Pandas实现方法,都能达成目标:

方法1:分组后标记过滤(直观的组级判断)

这种方法通过按用户唯一标识(这里是id)分组,判断每组内是否存在status_id=1的记录,再过滤掉包含该状态的用户所有行:

import pandas as pd

# 构造你的原始DataFrame
df = pd.DataFrame({
    'id': [23,23,23,25,25,28,29,29],
    'name': ['Alex','Alex','Alex','Bill','Bill','Claire','David','David'],
    'email': ['a@a.com','a@a.com','a@a.com','b@b.com','b@b.com','c@c.com','d@d.com','d@d.com'],
    'status_id': [1,2,3,2,3,3,1,2]
})

# 给每一行标记:所属用户是否从未有过status_id=1
has_no_status_1 = df.groupby('id')['status_id'].transform(lambda x: not x.isin([1]).any())

# 过滤得到结果
result_df = df[has_no_status_1]
print(result_df)

结果输出:

id     name     email  status_id
3   25     Bill  b@b.com          2
4   25     Bill  b@b.com          3
5   28  Claire  c@c.com          3

方法2:先提取无效用户ID再过滤(逻辑更直白)

先找出所有出现过status_id=1的用户ID,再直接过滤掉这些用户的所有行,新手更容易理解:

# 获取所有存在status_id=1的用户ID
invalid_user_ids = df[df['status_id'] == 1]['id'].unique()

# 保留不在无效ID列表里的用户数据
result_df = df[~df['id'].isin(invalid_user_ids)]

方法3:用query简化写法(代码更紧凑)

如果偏爱简洁的语法,可以结合query方法实现,逻辑和方法2一致:

invalid_user_ids = df[df['status_id'] == 1]['id'].unique()
result_df = df.query('id not in @invalid_user_ids')

这三种方法都能精准得到你想要的结果,其中方法2的性能在大数据量下会更优,因为它只需要一次筛选和去重,再做一次过滤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:21:22