如何删除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
相关产品推荐
相关产品推荐

