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

使用Python/Pandas实现时间序列value列单调非递减修正

Pandas实现value列单调非递减修正方案

核心方法

你需要的效果可以直接用Pandas内置的cummax()(累积最大值)方法实现,该方法会逐行计算从首行到当前行的最大值,天然符合「当前行value小于前序值时替换为前序最大值」的要求,时间复杂度为O(n),性能最优。

完整代码示例

1. 构造测试数据

import pandas as pd

# 构造与你示例一致的测试数据
data = {
    "datetime": [
        "2021-10-05 09:39:00",
        "2021-10-05 09:40:00",
        "2021-10-05 09:41:00",
        "2021-10-05 09:42:00",
        "2021-10-05 09:43:00"
    ],
    "value": [1, 2, 3, 2, 3]
}
df = pd.DataFrame(data)
# 转换datetime列为时间类型(可选,不影响value列计算)
df["datetime"] = pd.to_datetime(df["datetime"])

2. 核心处理逻辑(仅需1行代码)

注意操作前需确保数据已经按datetime列升序排序,若数据乱序先执行排序:

# 乱序数据先排序
df = df.sort_values("datetime").reset_index(drop=True)

# 修正value列为单调非递减
df["value"] = df["value"].cummax()

3. 输出验证

print(df)

输出结果与你预期一致:

datetime  value
0 2021-10-05 09:39:00      1
1 2021-10-05 09:40:00      2
2 2021-10-05 09:41:00      3
3 2021-10-05 09:42:00      3
4 2021-10-05 09:43:00      3

扩展场景

如果你的数据需要按某个维度(比如设备ID、用户ID等)分组,每个分组单独修正为单调非递减,可配合groupby使用:

# 示例:按device_id分组,每组单独计算单调非递减value
df["value"] = df.groupby("device_id")["value"].cummax()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:05