使用Pandas按站点数据范围对DataFrame进行高低分类的实现方法
实现方案
核心思路:先按站点分组计算该站点所有Variable值的波动范围,再根据自定义阈值给每个站点打分类标签,最后将标签同步到该站点的所有数据行。
方法1:transform 实现(代码更简洁)
直接通过分组广播的方式给原表新增分类字段:
import pandas as pd # 可手动调整分类阈值 THRESHOLD = 5 df['Type'] = df.groupby('Site')['Variable'].transform( lambda x: 'LOW' if (x.max() - x.min()) <= THRESHOLD else 'HIGH' )
方法2:分组统计后合并(便于调试中间结果)
如果需要查看每个站点的具体波动范围做校验,可以选择该方案:
import pandas as pd # 1. 计算每个站点的Variable取值范围 site_range = df.groupby('Site')['Variable'].agg( value_range=lambda x: x.max() - x.min() ).reset_index() # 2. 可手动调整分类阈值 THRESHOLD = 5 site_range['Type'] = site_range['value_range'].apply( lambda x: 'LOW' if x <= THRESHOLD else 'HIGH' ) # 3. 将分类标签合并回原数据表 df = df.merge(site_range[['Site', 'Type']], on='Site', how='left')
自定义调整说明
- 可根据业务场景修改
THRESHOLD的数值适配分类标准 - 可替换波动范围计算逻辑:比如将
x.max() - x.min()替换为四分位距x.quantile(0.75) - x.quantile(0.25),适配存在异常值的场景
内容的提问来源于stack exchange,提问作者dinn_
相关产品推荐
相关产品推荐

