如何取每只股票按照成交量排序后的前25%

我现在有个dateframe,分别记录一天的全市场股票的行情,然后我要取每只股票按照成交量排序后的前25%。但是每只股票的行情长度不一定是相同的,比如A有200条,B有240条,C只有80条,所以25%不是一个固定长度,我不能order后再limit,那我要怎么处理呢?


请先 登录 后评论

1 个回答

wale

DolphinDB中的context by也支持having,可以按组来来过滤数据

```

select * from t context by SecurityId csort volume desc having rowNo(volume) < volume.size() * 0.25

```

下面一种方法稍微复杂一点,就是先用percentile找到每个股票%75的最大值,然后用字典设定每个股票对应的75%最大值,再用conditionalFilter根据字典设定的值去过滤查找25%目标值:

```

filter = select int(percentile(volume, 75)) as min, max(volume)  as max from t group by SecurityId

filterMap = dict(filter.SecurityId, each(pair, filter.min, filter.max))

select * from t where conditionalFilter(volume, SecurityId, filterMap)

```


请先 登录 后评论