You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按PERMNO分组保留每第5个交易日的股票观测数据?

解决方案:按股票分组筛选每第5个交易日数据

你的核心问题是用resample('5D')是按日历时间间隔采样,而不是按每个股票自身的交易日数量计数,所以无法满足需求。正确的做法是对每个股票的交易日序列单独计数,筛选出第5、10、15...个交易日(从1开始计数)。

具体代码实现

import pandas as pd

# 确保date列是datetime类型(如果尚未转换)
crsp_daily['date'] = pd.to_datetime(crsp_daily['date'])

# 按股票代码分组,组内按日期排序,生成组内交易日序号(从0开始)
crsp_daily = crsp_daily.sort_values(['PERMNO', 'date'])
crsp_daily['trade_day_seq'] = crsp_daily.groupby('PERMNO').cumcount()

# 筛选每第5个交易日(序号从0开始,第5个对应序号4,第10个对应序号9,以此类推)
filtered_df = crsp_daily[crsp_daily['trade_day_seq'] % 5 == 4].drop('trade_day_seq', axis=1)

# 查看结果
print(filtered_df)

代码说明

  1. 日期格式转换:先确保date列是datetime类型,保证排序和分组的正确性。
  2. 组内排序与计数:按PERMNO分组后,用cumcount()生成每个股票内部的交易日序号,序号从0开始递增,对应每个股票的交易日顺序。
  3. 筛选目标行:通过trade_day_seq %5 ==4筛选出每第5个交易日的记录(从1开始计数的第5、10、15...个交易日),最后删除辅助列得到结果。

为什么resample('5D')不适用

resample('5D')是基于固定日历时间间隔的采样,会把所有股票的时间轴统一按5天分割,完全忽略不同股票的交易日差异(比如有的股票某天停牌无数据),也无法准确对应“第5个交易日”的需求,因此得到的Resampler对象无法直接生成你需要的结果。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:01:29