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

Pandas中如何保留a、b对的指定重复次数观测值并移除超额项

解决Pandas中按指定列配对保留最多N条重复项的问题

问题场景

现有如下结构的Pandas DataFrame:

a  b  c
0  1  2  3
1  1  2  3
...

需求:针对a、b列的配对值,最多保留100个重复项。例如当a=1且b=2的配对出现200次时,仅保留其中100次。尝试在GroupBy后的DataFrame上使用duplicated()方法无法实现该需求。

解决方案

可以利用groupby()结合cumcount()方法实现精准控制每个分组的保留行数,具体代码如下:

简洁版(无需新增列)

# 直接筛选出每个a、b配对的前100条记录
result_df = df[df.groupby(['a', 'b']).cumcount() < 100]

分步版(更易理解)

# 1. 按a、b分组,为每个分组内的行添加从0开始的计数序号
df['group_seq'] = df.groupby(['a', 'b']).cumcount()

# 2. 筛选出序号小于100的行,即保留每个配对的前100条
result_df = df[df['group_seq'] < 100].drop(columns='group_seq')

原理说明

cumcount()会为每个分组内的行生成从0开始的递增序号,通过筛选序号小于100的行,就能保证每个a、b配对最多保留100条记录。这种方式比duplicated()更适合这类需要控制重复项保留数量的场景——duplicated()仅能标记是否为重复项,无法指定保留的重复次数上限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:13