如何在Pandas DataFrame中仅保留某列重复次数超4次的行?
解决方案:筛选Pandas DataFrame中指定列重复次数超过4次的行
这问题我之前处理大型数据集的时候也遇到过,给你两种实用的方案,兼顾简洁性和处理效率,完全适配你的需求:
方法一:先统计频次再筛选(直观易懂)
这种方法步骤清晰,适合需要先查看各Shop出现次数的场景:
import pandas as pd # 构造你的示例DataFrame(实际使用时替换成你的数据集即可) data = { 'Shop': ['Nike', 'Nike', 'Nike', 'Nike', 'Nike', 'Adidas', 'Adidas', 'Adidas', 'Apple', 'Apple', 'Apple', 'Apple', 'United', 'United', 'United', 'United', 'United', 'United'], 'Name': ['Tom', 'Keith', 'Justin', 'Thomas', 'George', 'Tom', 'Thomas', 'Jennifer', 'Louise', 'Matthiew', 'Vincent', 'George', 'Tom', 'Benjamin', 'James', 'Avery', 'Marcus', 'Justin'], 'Number': [45, 245, 876, 65, 6, 34, 652, 872, 79, 1, 652, 85, 62, 4, 23, 96, 763, 45] } df = pd.DataFrame(data) # 1. 统计每个Shop的出现次数 shop_frequencies = df['Shop'].value_counts() # 2. 筛选出出现次数超过4次的Shop名称 valid_shops = shop_frequencies[shop_frequencies > 4].index # 3. 过滤原DataFrame,只保留符合条件的行 filtered_df = df[df['Shop'].isin(valid_shops)] print(filtered_df)
运行后就能得到你期望的结果:只包含Nike和United的所有行。
方法二:用transform高效筛选(适合大型数据集)
如果你的数据集非常大,推荐用这种方法——它只需要一次遍历DataFrame,性能更优:
# 直接通过groupby+transform完成筛选 filtered_df = df[df.groupby('Shop')['Shop'].transform('size') > 4]
原理说明
groupby('Shop')['Shop'].transform('size')会给每一行返回对应Shop的总出现次数,之后我们直接筛选次数大于4的行即可,整个过程不需要额外存储频次统计结果,内存占用更低,处理速度更快。
两种方法都能完美满足你的需求,你可以根据自己的数据集规模和使用习惯选择~
内容的提问来源于stack exchange,提问作者Matthias Gallagher
相关产品推荐
相关产品推荐

