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

如何使用Python Pandas按用户分组提取每个用户的第2、第3个唯一ID

解决方案

核心思路是先按用户名分组提取每个用户的唯一id列表,按指定步长筛选后再匹配回原表获取所有对应行,完整实现代码如下:

import pandas as pd
import numpy as np

# 原始数据构造
id_list = ['11', '11', '11', '15', '15', '15', '23', '23', '25','25','26','26','27','27','27','28','28']
username = ['usera','usera','usera','usera','usera','usera','usera','usera','usera','usera','userb','userb','userb','userb','userb','userb','userb']
date = ['2021-05-04','2021-05-05','2021-05-05','2021-05-06','2021-06-07','2021-06-08','2021-07-09','2021-03-09','2021-04-10','2021-04-10','2021-04-10','2021-04-10','2021-04-10','2021-04-10','2021-04-10','2021-04-10','2021-04-10']

df = pd.DataFrame({'id': id_list, 'username': username, 'date': date})
# 先按用户名+id排序,保证每个用户下的id顺序稳定
df = df.sort_values(by=['username', 'id'], ignore_index=True)

# 自定义步长:取每第2个设为2,取每第3个设为3,可按需调整
step = 2

# 方法1:循环实现,逻辑清晰易调整
selected_ids = []
for user, group in df.groupby('username'):
    # 获取当前用户的唯一id并排序
    user_unique_ids = sorted(group['id'].unique())
    # 按步长筛选id,::step表示从第1个开始每step个取1个
    selected = user_unique_ids[::step]
    selected_ids.extend(selected)

# 从原表中筛选出所有符合条件的行
result_df = df[df['id'].isin(selected_ids)].reset_index(drop=True)

# 查看结果的id列,和需求完全匹配
print(result_df['id'].tolist())
# 输出:['11', '11', '11', '23', '23', '26', '26', '28', '28']

如果更习惯pandas链式操作,可以用下面的简洁写法:

# 方法2:链式操作,无需显式循环
result_df = (
    # 先提取每个用户的唯一id行
    df.groupby(['username', 'id']).head(1)
    # 按用户分组后按步长取id
    .groupby('username').nth(list(range(0, 1000, step)))
    # 匹配回原表获取所有对应行
    .merge(df, on=['username', 'id'], how='left')
    # 保留原始列顺序
    [['id', 'username', 'date']]
    .reset_index(drop=True)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:03