pandas中按数值范围分组及筛选Gt3.0-5.0区间高频flt的方法
一、通用方法:按数值范围对pandas数据做分组
处理连续数值列的范围归组,无需手动逐行判断区间,直接使用pandas内置的pd.cut()分箱工具即可完成:
- 通过
bins参数传入自定义的区间端点,支持用-inf/inf表示无边界的上下限区间 - 通过
inclusive参数控制区间边界的包含规则,避免边界值漏匹配 - 生成的分组标签列可直接配合
groupby()完成跨组聚合统计
注意:分箱时如果遇到区间边界值(比如刚好等于3.0、5.0的Gt值),提前设置好边界包含规则可以避免漏匹配问题。
通用分箱示例代码:
# 给Gt列按自定义区间生成分组标签 df['Gt_range_group'] = pd.cut( df['Gt'], bins=[-float('inf'), 1.0, 3.0, 5.0, float('inf')], labels=['Gt≤1.0', '1.0<Gt≤3.0', '3.0<Gt≤5.0', 'Gt>5.0'], include_lowest=True )
二、航班数据集的Top5高频条目实现
需求逻辑拆解:筛选Gt在3.0-5.0区间的行 → 统计区间内各flt的出现频次并降序排列 → 取前5个条目
分步可运行代码:
import pandas as pd # 加载你的航班数据集(实际使用时替换为文件读取逻辑,比如pd.read_csv("flights.csv")) df = pd.DataFrame({ 'flt': ['CX 261', 'CX 383', 'CX 880', 'CX 105', 'CX 237'], 'OrgiDest': ['CDG', 'ZRH', 'LAX', 'MEL', 'LHR'], 'Gt': [1.0, 2.0, 3.0, 5.0, 5.0] }) # 1. 筛选Gt处于3.0-5.0闭区间的行 filtered_subset = df[df['Gt'].between(3.0, 5.0, inclusive='both')] # 2. 统计flt频次、自动按频次降序排列,取前5个结果 top5_flt_list = filtered_subset['flt'].value_counts().head(5)
针对你提供的样例数据集,上述代码的运行结果为:
CX 880 1 CX 105 1 CX 237 1 Name: flt, dtype: int64
补充说明:
- 你之前按Gt值从小到大排序的操作不属于本需求的必需步骤,除非需要在同频次下按Gt值调整展示顺序,否则无需提前执行——
value_counts()方法自带按频次降序的排序逻辑,可直接满足排序要求 - 如果需要保留每个flt对应的原表字段(比如OrgiDest、Gt值),而不是仅输出频次统计结果,可以使用如下代码关联原始表信息:
# 生成带频次标记的原始明细Top5结果 freq_stats = filtered_subset['flt'].value_counts().rename('appear_freq').reset_index() top5_with_detail = filtered_subset.merge( freq_stats, left_on='flt', right_on='index' ).drop(columns='index').sort_values(by='appear_freq', ascending=False).head(5)
内容的提问来源于stack exchange,提问作者Toolongdidntread
相关产品推荐
相关产品推荐

