在Pandas中移除无效值以正确重建累积时序数据
处理累积时序数据中的无效值,替换为NaN
已知从文本提取的累积型时序数据集存在无效值(累积数据应随时间递增,部分值不符合该规则),需要将这些无效值替换为NaN。
原始数据示例:
df date value 2021-07-20 21347.0 2021-07-24 21739.0 2021-08-02 22.0 2021-08-03 22.0 2021-08-06 22947.0 2021-08-17 4.0
期望输出:
df date value 2021-07-20 21347.0 2021-07-24 21739.0 2021-08-02 nan 2021-08-03 nan 2021-08-06 22947.0 2021-08-17 nan
解决方案
累积型时序数据的核心规则是当前值必须大于等于历史最大值(累积数据不会随时间减少),基于这个规则可以快速过滤无效值:
- 确保日期列格式正确(若未转换):
import pandas as pd df['date'] = pd.to_datetime(df['date'])
- 计算
value列的累积最大值,将不符合规则的值替换为NaN:
# 计算截至每行的历史最大值 cumulative_max = df['value'].cummax() # 保留大于等于累积最大值的数值,其余替换为NaN df['value'] = df['value'].where(df['value'] >= cumulative_max)
如果数据存在微小统计误差(如极小幅度的下降),可设置容差阈值,比如允许当前值不低于累积最大值的99%:
df['value'] = df['value'].where(df['value'] >= cumulative_max * 0.99)
内容的提问来源于stack exchange,提问作者kostya ivanov
相关产品推荐
相关产品推荐

