按PRIMARY_SIC_CODE分组剔除ROA列首尾1%分位数的实现方法
按分组剔除ROA首尾1%分位数的简便实现
Python(Pandas)实现
利用groupby结合filter方法,针对每个分组计算ROA的1%和99%分位数,筛选出处于中间区间的行:
import pandas as pd # 假设数据集存储在DataFrame df中 df_filtered = df.groupby('PRIMARY_SIC_CODE').filter( lambda group: (group['ROA'] > group['ROA'].quantile(0.01)) & (group['ROA'] < group['ROA'].quantile(0.99)) )
- 逻辑说明:
groupby('PRIMARY_SIC_CODE')按行业代码分组,filter传入的lambda函数会对每个分组单独判断,仅保留ROA值落在1%~99%分位数之间的行。
R(dplyr)实现
借助dplyr的分组和筛选函数,高效完成分组过滤:
library(dplyr) # 假设数据集存储在data.frame df中 df_filtered <- df %>% group_by(PRIMARY_SIC_CODE) %>% filter(between(ROA, quantile(ROA, 0.01), quantile(ROA, 0.99))) %>% ungroup()
- 逻辑说明:
group_by分组后,between函数直接判断ROA是否处于1%和99%分位数区间内,最后用ungroup取消分组状态(按需可选)。
注:如果需要保留等于分位数的边界值,可将Python中的
>/<改为>=/<=,R中无需修改(between默认包含边界)。
内容的提问来源于stack exchange,提问作者R__
相关产品推荐
相关产品推荐

