Pandas Series时间序列带容差调整频率并保留原始日期的实现方法
实现方案
你之前使用的reindex方法会直接将索引替换为规整的14天间隔日期,自然会丢失原始日期信息,改用merge_asof做时间近邻匹配即可实现需求,完整实现步骤如下:
第一步:数据预处理
先把日期字段转为datetime格式并排序
import pandas as pd import datetime # 请将下方变量名替换为你自己的原始数据变量 df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date').sort_index()
第二步:执行近邻匹配
# 生成14天间隔的参考时间点,覆盖全周期 target_dates = pd.date_range(start=df.index.min(), end=df.index.max() + pd.Timedelta(days=14), freq='14D') target_df = pd.DataFrame({'target_date': target_dates}) df_reset = df.reset_index() # 按最近时间匹配,时间差容忍值为3天,和你原有逻辑一致 matched = pd.merge_asof( target_df, df_reset, left_on='target_date', right_on='Date', direction='nearest', tolerance=pd.Timedelta(days=3) )
第三步:处理输出结果
# 匹配到的条目保留原始日期,未匹配到的用参考日期填充 matched['Date'] = matched['Date'].fillna(matched['target_date']) # 保留所需字段、剔除同日期同值重复条目、按日期排序 result = matched[['Date', 'Value']].drop_duplicates(subset=['Date', 'Value'], keep='first').sort_values('Date').reset_index(drop=True)
运行后输出的result就和你期望的结果完全一致。如果需要调整时间容忍度、匹配方向,修改对应参数即可。
内容的提问来源于stack exchange,提问作者hotoats
相关产品推荐
相关产品推荐

