在pandas DataFrame中为股票季度盈利日期前后批量新增n条日期行
实现方案
以下代码可直接运行,调整参数n即可控制每个原始日期前后新增的行数:
import pandas as pd # 原始数据构造 df = pd.DataFrame({ 'ticker': ['AAPL', 'AAPL', 'AAPL','AAPL', 'MSFT', 'MSFT','MSFT', 'MSFT'], 'datetime': ['2015-01-01', '2015-04-01', '2015-07-01', '2015-12-01', '2015-01-01', '2015-04-01', '2015-07-01', '2015-12-01'], }) df['datetime'] = pd.to_datetime(df['datetime']) # 自定义前后新增天数,n=1即前后各加1天 n = 1 # 生成每行对应的前后n天日期序列 df['date_range'] = df['datetime'].apply(lambda dt: pd.date_range(dt - pd.Timedelta(days=n), dt + pd.Timedelta(days=n))) # 展开日期序列为独立行 result_df = df.explode('date_range', ignore_index=True) # 替换原日期列、删除临时辅助列 result_df['datetime'] = result_df['date_range'] result_df = result_df.drop(columns=['date_range']) # 可选:按股票代码和日期排序,保证输出顺序和示例一致 result_df = result_df.sort_values(by=['ticker', 'datetime'], ignore_index=True)
逻辑说明
- 通过
pd.Timedelta计算原始日期的前后偏移量 - 用
pd.date_range生成包含原始日期、前后n天的连续日期序列 - 用
explode方法将列表格式的日期序列拆分为独立行,最终行数为原始行数*(2n+1),完全匹配你给出的预期输出结构
注意事项
如果需要生成的是交易日而非自然日,可替换pd.Timedelta为pandas的BDay交易日偏移,其余逻辑不变。
内容的提问来源于stack exchange,提问作者Niccola Tartaglia
相关产品推荐
相关产品推荐

