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

在含重复值的索引上使用pd.asfreq()实现时序数据前向填充

解决pandas重复日期索引的按日前向填充问题

针对你的需求——保留重复日期对应的唯一数据行,同时按日粒度前向填充每周发布的数据,可以通过按ticker分组处理实现,具体步骤如下:

核心思路

每个ticker对应独立的时间序列,我们需要为每个ticker生成完整的每日日期序列,再用前向填充(ffill)补全中间日期的数据,最后合并所有结果。

代码实现

1. 创建示例DataFrame

import pandas as pd

# 构造示例数据
data = {
    'date': ['2012-01-05']*5 + ['2012-01-12']*5,
    'Product': ['M']*10,
    'ticker': ['XYDZ Index', 'XDZY Index', 'DZXY Index', 'YXZD Index', 'ZDXY Index']*2,
    'lots': [1000, 2000, 3000, 4000, 5000, 1150, 2250, 3350, 4450, 5550]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

2. 按ticker分组并填充数据

# 重置索引,将date转为普通列
df_reset = df.reset_index()

# 定义分组处理函数
def fill_daily(group):
    # 生成该ticker的完整每日日期序列
    date_range = pd.date_range(start=group['date'].min(), end=group['date'].max(), freq='D')
    # 创建包含完整日期的空DataFrame
    full_dates = pd.DataFrame({'date': date_range})
    # 合并原数据与完整日期,按date排序后前向填充
    merged = pd.merge(full_dates, group, on='date', how='left').sort_values('date')
    merged = merged.ffill()
    return merged

# 按ticker分组处理,合并结果
filled_df = df_reset.groupby('ticker').apply(fill_daily).reset_index(drop=True)
# 重新设置date为索引
filled_df = filled_df.set_index('date')

3. 查看结果

执行后,filled_df会包含从2012-01-05到2012-01-12的每日数据,每个日期下保留所有ticker的行,中间日期的数据均为前一周的数值,直到下一个发布日更新。

关键说明

  • 按ticker分组确保每个标的的填充逻辑独立,不会互相干扰
  • pd.date_range生成连续的每日日期,保证粒度符合需求
  • ffill()实现前向填充,自动沿用最近的可用数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:20