悠悠楠杉
高效数据筛选:Pandas按类别提取前N行完全指南
高效数据筛选:Pandas按类别提取前N行完全指南
数据预处理的关键步骤
在实际数据分析工作中,我们经常需要按照特定类别筛选数据。比如电商场景下需要查看每个品类销量前10的商品,或内容分析时需要提取每个标签下的热点文章。传统方法需要编写复杂的循环代码,而Pandas提供了更优雅的解决方案。
假设我们有一个包含新闻文章的DataFrame:
python
import pandas as pd
data = {
'标题': ['冬奥会开幕式惊艳世界', 'AI技术新突破', '春节旅游市场复苏', '新能源车销量创新高'],
'分类': ['体育', '科技', '旅游', '汽车'],
'阅读量': [150万, 89万, 120万, 95万],
'正文': [...] # 实际内容省略
}
df = pd.DataFrame(data)
核心方法详解
方法一:groupby+head组合
最简洁的实现方式是使用groupby
配合head
方法:
python
top_n = df.groupby('分类').head(2)
这个操作相当于:
1. 按"分类"列进行分组
2. 从每个分组中提取前2条记录
3. 自动保留原始索引顺序
方法二:sort_values+groupby
当需要根据特定指标排序时:
python
top_n = df.sort_values('阅读量', ascending=False).groupby('分类').head(2)
注意事项:
- 确保排序字段能正确反映优先级
- 大数据集时sort_values
可能影响性能
高级应用场景
多条件筛选
python
按分类和发布时间双重条件筛选
df['发布时间'] = pd.todatetime(df['发布时间']) topn = df.sort_values(['分类', '发布时间'], ascending=[True, False]).groupby('分类').head(3)
自定义筛选函数
python
def custom_filter(group):
return group.nlargest(2, '点赞数')
topn = df.groupby('分类', groupkeys=False).apply(custom_filter)
性能优化建议
大数据集处理:考虑先过滤再分组
python df[df['阅读量'] > 阈值].groupby('分类').head(n)
内存管理:处理百万级数据时,使用
dtype
优化内存占用并行计算:极大数据集可尝试
dask
或modin
库替代Pandas
常见问题排查
- 结果不符合预期:检查是否有重复值影响排序
- 缺失分组:使用
dropna=False
保留空值分组 - 性能瓶颈:考虑对分组列建立索引
通过掌握这些技巧,您能够高效地从复杂数据集中提取关键信息,为后续分析提供高质量的数据基础。