如何用Pandas从Datetime Index提取每日收盘时间并添加为新列
解决方案
你的问题出在pd.concat是按索引对齐合并,但a的索引是日度日期(如2024-01-01),而SPX1m的索引是分钟级时间戳(如2024-01-01 09:30:00),两者索引不匹配,导致合并后大部分行的EOD列是缺失值。
下面两种方法可以直接实现需求:
方法一:用groupby.transform一步到位
不需要单独生成a,直接对原DataFrame分组后广播每日最大时间到组内所有行:
# 保留索引为DT列(你已完成这步) SPX1m["DT"] = SPX1m.index # 直接添加EOD列 SPX1m['EOD'] = SPX1m.groupby(pd.Grouper(freq='D'))['DT'].transform('max')
transform('max')会将每个日期组的最大时间戳,填充到该组的每一行,自动对齐所有分钟级数据。
方法二:基于已生成的a映射填充
如果已经得到了正确的a(每日最晚时间的Series),可以通过索引的日期部分映射取值:
# 用原数据索引的日期部分,匹配a的日度索引,取出对应的最大时间 SPX1m['EOD'] = SPX1m.index.date.map(a)
这里SPX1m.index.date会把每个分钟级时间戳提取出纯日期(如2024-01-01),正好和a的索引一致,map会自动将对应的每日最晚时间填充到每一行。
内容的提问来源于stack exchange,提问作者maskapone
相关产品推荐
相关产品推荐

