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

如何使用Pandas筛选DataFrame中每第2或第3个唯一id对应的所有行

实现方法

核心逻辑

你已经提前将DataFrame按id排序,我们只需要给每个唯一的id按出现顺序分配统一的序号,再按步长筛选对应序号的所有行即可:

  1. 用groupby('id').ngroup()给每个唯一id分配从0开始的连续序号,加1后转为从1开始的计数,相同id的所有行序号完全一致
  2. 按你需要的步长n(n=2对应每第2个,n=3对应每第3个),筛选序号 % n == 1的行即可

完整代码

import pandas as pd

# 注意原变量名id是Python内置函数,这里重命名为id_list避免冲突
id_list = ['11', '11', '11', '15', '15', '15', '23', '23', '25']
username = ['usera','userb','userc','userd','usere','userf','userd','usere','userf']
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']

df = pd.DataFrame({'id': id_list, 'username': username, 'date': date})
dx = df.sort_values(by=['id'], ignore_index=True)

# 给唯一id分配从1开始的顺序编号
dx['id_rank'] = dx.groupby('id').ngroup() + 1

# 筛选每第2个唯一id的所有行
n = 2
res_n2 = dx[dx['id_rank'] % n == 1].drop(columns='id_rank')
print("每第2个唯一id的结果:")
print(res_n2)

# 筛选每第3个唯一id的所有行
n = 3
res_n3 = dx[dx['id_rank'] % n == 1].drop(columns='id_rank')
print("\n每第3个唯一id的结果:")
print(res_n3)

输出验证

运行后输出和你给出的预期完全匹配:

  • n=2时保留id为11、23的所有行
  • n=3时保留id为11、25的所有行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:27:03