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

如何删除pandas DataFrame中匹配字符串超量的行,仅保留指定数量匹配行

解决方法:按最后一列分组保留前N行

嘿,这个需求我之前刚好处理过,用pandas的分组计数就能轻松搞定,完全适配字符串型列的场景!

核心思路很简单:按最后一列的字符串值分组,给每个组内的行按顺序编号,然后只保留编号小于阈值的行——这样每个字符串最多就只留前N条记录了。

具体代码实现

先给你一个可直接运行的示例,你可以套用到自己的DataFrame上:

import pandas as pd

# 先模拟一个测试用的DataFrame(替换成你自己的df即可)
data = {'其他列1': range(20), '其他列2': ['a']*20, '最后一列': ['Yes']*8 + ['No']*7 + ['Maybe']*5}
df = pd.DataFrame(data)

# 设置你的阈值N,比如题目里的5
threshold = 5

# 关键操作:按最后一列分组,生成组内行号,筛选行号小于阈值的行
filtered_df = df[df.groupby(df.iloc[:, -1]).cumcount() < threshold]

# 验证结果:查看最后一列各值的保留行数
print(filtered_df['最后一列'].value_counts())

代码解释

  • df.iloc[:, -1]:用来定位DataFrame的最后一列,不管它叫什么名字都能生效;如果你的最后一列有明确列名(比如叫status),直接写列名可读性更好,比如df.groupby('status').cumcount()。
  • groupby(...).cumcount():给每个分组内的行从0开始顺序编号,比如第一个出现的"Yes"编号0,第二个1,以此类推。
  • 最后的布尔索引[...] < threshold:只保留编号小于阈值的行,也就是每个字符串的前N条记录。

这个方法不管最后一列有多少种不同的字符串,都能自动处理,而且不会影响其他列的数据,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Ammar Sabir Cheema

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:05