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

Pandas按user_id分组处理DataFrame:按status规则过滤并去重

解决方案

可以通过分组标记+筛选+去重的步骤实现需求,具体代码如下:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'user_id': [1, 1, 1, 2, 2],
    'alert_source': ['research'] * 5,
    'status': ['deleted', 'deleted', 'valid', 'deleted', 'valid']
})

# 统一status字段大小写,避免匹配误差
df['status'] = df['status'].str.upper()

# 为每行标记所属user_id是否存在VALID状态的记录
has_valid = df.groupby('user_id')['status'].transform(lambda x: (x == 'VALID').any())

# 筛选符合条件的行:要么是VALID行,要么是无VALID记录的DELETED行
filtered_df = df[(df['status'] == 'VALID') | (~has_valid & (df['status'] == 'DELETED'))]

# 对全DELETED的user_id去重,仅保留一行
cleaned_df = filtered_df.drop_duplicates(subset=['user_id', 'status'], keep='first')

print(cleaned_df)

代码说明:

  • 统一大小写:将status字段转为大写,避免原始数据中大小写不一致(如valid/VALID)导致的匹配失败。
  • 分组标记:使用groupby+transform为每行生成一个标记,指示该user_id是否存在VALID记录,高效完成每行的条件判断。
  • 筛选逻辑:一步完成两种场景的初步过滤——直接保留VALID行,或保留无VALID记录的DELETED行。
  • 去重处理:对仅含DELETED记录的user_id,通过drop_duplicates保留唯一行,满足去重需求。

如果数据中alert_source存在不同取值,可调整drop_duplicates的subset参数,比如加入alert_source,实现按user_id+alert_source+status维度去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:20:49