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

如何用Pandas查找时间序列中存在连续三次值增长的工具数据

用Pandas找出连续三日测量值增长的工具序列

核心思路

按工具分组后,确保每组数据按日期排序,通过计算测量值的差分识别连续增长的日期段,最终提取符合条件的连续三日数据序列。

步骤实现

1. 准备示例数据

如果已有目标DataFrame可跳过此步,以下是匹配需求的示例数据构造:

import pandas as pd

data = {
    'Tool': ['A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'Value': [10, 12, 11, 5, 7, 9, 8],
    'Date': ['2024-01-20', '2024-01-21', '2024-01-22', '2024-01-21', '2024-01-22', '2024-02-01', '2024-02-02']
}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])  # 转为日期类型,确保排序逻辑正确

2. 定义处理函数

def find_consecutive_growth(df):
    # 强制转换日期格式,避免排序错误
    df['Date'] = pd.to_datetime(df['Date'])
    result = []

    # 按工具分组处理
    for tool, group in df.groupby('Tool'):
        # 组内按日期升序排列
        sorted_group = group.sort_values('Date').reset_index(drop=True)
        # 计算相邻两日的测量值差值,正值代表增长
        value_diffs = sorted_group['Value'].diff()
        # 定位连续两个正差值的起始位置(对应连续三天增长)
        has_consecutive_growth = (value_diffs > 0) & (value_diffs.shift(-1) > 0)
        valid_start_indices = has_consecutive_growth[has_consecutive_growth].index

        # 提取每个符合条件的连续三天序列
        for idx in valid_start_indices:
            growth_segment = sorted_group.iloc[idx:idx+3]
            result.append(growth_segment)
    
    # 合并结果为统一DataFrame,无符合条件则返回空表
    return pd.concat(result, ignore_index=True) if result else pd.DataFrame(columns=df.columns)

3. 调用并查看结果

growth_data = find_consecutive_growth(df)
print(growth_data)

运行后会输出符合条件的序列:

Tool  Value       Date
0    B      5 2024-01-21
1    B      7 2024-01-22
2    B      9 2024-02-01

补充说明

  • 如果存在连续超过三天的增长(比如连续四天增长),上述函数会提取重叠的序列(如第1-3天、第2-4天),若需避免重叠,可修改逻辑识别连续增长的完整区间后再提取;
  • 若同一工具同一日期有多条数据,需先做聚合处理(如取均值、最大值),否则会干扰差分计算;
  • 务必保证Date列是datetime类型,否则排序逻辑会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39