如何用Pandas将非完整时间序列转换为固定间隔完整序列
非完整时间序列转固定间隔序列的实现思路
第一步:明确核心规则
先确定两个关键规则:- 目标固定时间间隔(比如每日、每周,根据业务需求选择)
- 原数据中重复时间戳的处理逻辑(示例里的累计净利润,建议保留同一时间戳的最后一条记录,因为通常是后续更新值;其他场景可按需选择求和/平均)
第二步:预处理原数据
针对你提供的示例,先对重复时间戳做去重处理,按时间戳分组后保留每组最后一条,得到干净的关键时间戳数据:Date/Time,Cmltv Net Profit 2013-05-28 00:00:00,-14000.0 2013-05-30 00:00:00,-24200.0 2013-06-07 00:00:00,-11200.0 2013-06-24 00:00:00,-13800.0第三步:生成完整时间序列
以原数据的最早时间(2013-05-28)和最晚时间(2013-06-24)为起止,按设定的固定间隔生成完整的时间戳列表。比如选每日间隔,就生成该时间段内的所有日期。第四步:对齐填充缺失值
将预处理后的原数据与完整时间序列对齐,原数据存在的时间戳保留原值,缺失的时间戳按业务逻辑填充:- 累计净利润这类数据优先用前向填充(缺失日期沿用前一个有记录的数值,因为没有新更新时累计值不会变化)
- 特殊场景可选择后向填充或固定值填充
工具实现示例(Python Pandas)
用代码快速完成上述流程:import pandas as pd # 读取数据并解析时间戳 df = pd.read_csv('data.csv', parse_dates=['Date/Time'], index_col='Date/Time') # 去重:同一时间戳保留最后一条记录 df = df.groupby(df.index).last() # 生成每日完整时间序列 full_time_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='D') # 对齐数据并前向填充缺失值 full_series = df.reindex(full_time_index).ffill() # 转换为原始格式输出 print(full_series.reset_index().rename(columns={'index': 'Date/Time'}))
内容的提问来源于stack exchange,提问作者ben balaj
相关产品推荐
相关产品推荐

