如何用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
相关产品推荐
相关产品推荐

