不同RangeIndex长度的字符串合并时按日期匹配填充缺失值的实现方法
实现方案
以下基于Python pandas库实现,适配你提到的多个不等长时间序列按日期匹配、空缺值前向填充的需求:
核心逻辑
- 先确定所有序列的完整基准日期序列:可以取所有输入字符串里出现过的日期去重后排序,也可以直接用最长的那个序列的日期作为基准
- 把每个输入字符串都转换为独立的DataFrame,将日期列设为索引
- 所有DataFrame都重索引到前面的基准日期序列,用
ffill(前向填充)参数自动填充空缺位置的上一个有效值 - 把处理完的所有DataFrame横向拼接即可
示例代码
import pandas as pd # 1. 处理输入字符串转DataFrame # 字符串1转df1 s1 = """20160101 1.08526 20160102 1.08535 20160103 1.09052 20160104 1.08659""" df1 = pd.DataFrame([line.split() for line in s1.strip().split('\n')], columns=['date1', 'val1']) df1['val1'] = df1['val1'].astype(float) # 字符串2转df2 s2 = """20160101 150.0659 20160103 145.8063 20160104 143.5892""" df2 = pd.DataFrame([line.split() for line in s2.strip().split('\n')], columns=['date2', 'val2']) df2['val2'] = df2['val2'].astype(float) # 2. 生成基准日期序列,这里用df1的完整日期作为基准 full_dates = df1['date1'].tolist() # 3. 给df2重索引+前向填充缺失值 df2_filled = df2.set_index('date2').reindex(full_dates, method='ffill').reset_index() df2_filled.columns = ['date2', 'val2'] # 4. 横向拼接得到结果 result = pd.concat([df1, df2_filled], axis=1) # 输出为字符串格式的话可以用以下代码 output_str = result.to_string(header=False, index=False) print(output_str)
多序列扩展方法
如果你有5个不等长的序列,只需要把每个序列都按照上面处理df2的逻辑,统一重索引到基准日期序列并前向填充,再一起放到concat的列表参数里即可。
注意事项
- 如果序列开头就存在缺失值,
ffill不会填充,有需要可以额外加bfill参数向后填充开头空缺 - 日期如果是跨多月/多年的非连续格式,基准日期可以用
pd.date_range生成连续日期序列后转成你需要的字符串格式
内容的提问来源于stack exchange,提问作者Svensation
相关产品推荐
相关产品推荐

