如何用Python Pandas为全量市场数据按月度生成交易日序号?
解决方案:按月生成交易日递增序号
直接使用pandas的groupby结合cumcount()方法即可实现全量数据集的按月交易日序号生成,这是最简洁高效的方案:
核心代码
如果你的日期是DataFrame的索引(如示例所示):
df['trading_day'] = df.groupby([df.index.year, df.index.month]).cumcount() + 1
如果日期是单独的列(列名为Date):
df['trading_day'] = df.groupby([df['Date'].dt.year, df['Date'].dt.month]).cumcount() + 1
原理说明
groupby([year, month])会将数据按「年份-月份」分组,精准对应每个自然月的交易日数据;cumcount()会为每个分组内的行生成从0开始的连续整数,加1后就得到从1开始的交易日序号,和你单月测试时用range(1, len(df_test)+1)的效果完全一致;- 这个方法自动跳过非交易日(因为你的数据集只有交易日数据),不需要额外处理日历日和交易日的匹配问题。
为什么之前的方法失败
你之前用pd.Grouper(freq='M')分组后尝试.transform(add(1))无效,是因为add(1)只是简单的数值加法,无法生成组内递增序号,而cumcount()是pandas专门为分组场景设计的序号生成工具。
内容的提问来源于stack exchange,提问作者David Hajes
相关产品推荐
相关产品推荐

