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

如何根据DataFrame指定列的数值下降沿拆分数据集

Pandas基于列值下降沿拆分DataFrame实现

问题场景

现有结构化数据集,指定列A的数值分布样例如下:

A B C D E
0 - - - - 
0 - - - - 
0 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 
0 - - - - 
0 - - - - 
0  - - - - 
10 - - - - 
10 - - - - 

需要按事件维度拆分数据,核心规则为识别列A数据流中的数值下降沿(当前行A值小于上一行A值的位置)作为拆分边界,预期拆分后得到两个独立数据块,效果如下:

A B C D E
0 - - - - 
0 - - - - 
0 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 
20 - - - - 

0 - - - - 
0 - - - - 
0  - - - - 
10 - - - - 
10 - - - - 

实现代码

基于Pandas实现的完整代码如下:

import pandas as pd

# df 为原始加载的DataFrame
# 标记下降沿位置:当前行A值小于上一行A值时判定为下降沿
df["fall_flag"] = df["A"] < df["A"].shift(1)
# 累计求和生成分组ID,每遇到一次下降沿分组ID+1
df["group_id"] = df["fall_flag"].cumsum()
# 按分组ID拆分,移除临时标记列得到最终拆分结果
split_result = [
    group.drop(columns=["fall_flag", "group_id"]) 
    for _, group in df.groupby("group_id")
]

逻辑说明

  • df["A"].shift(1) 会将A列数值整体向下偏移1行,快速匹配每一行对应的上一行A列数值,无需写循环逐行遍历
  • 逐行对比当前A值与上一行A值,当前值更小的位置即为下降沿,对应位置标记为True
  • 对下降沿标记列做累计求和,每遇到一次下降沿分组ID就自增1,天然将连续的同事件数据划归到同一分组
  • 最后按分组ID拆分数据,删除过程中生成的临时标记列,即可得到符合预期的拆分结果列表,列表中每个元素对应一个独立事件的DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:18:18