You need to enable JavaScript to run this app. 如何按value=100条件切分pandas DataFrame并批量绘制切片图
优惠活动
大模型
产品
解决方案
定价
更多

如何按value=100条件切分pandas DataFrame并批量绘制切片图

你之前写的df[df['value'] <= 100]得不到预期结果的原因很简单:你提供的数据集里value列的最大值就是100,这个筛选条件等同于保留所有行,自然和原表完全一致。

切分数据的实现方法

核心流程是先定位所有满足value == 100的行位置,再按照这些位置把原表拆成连续的数据块,不需要逐行写循环判断:

  1. 定位切分触发点
    # 取出所有value等于100的行索引,作为切分标记
    trigger_idx = df.index[df['value'] == 100].tolist()
    
    用你提供的示例数据集运行这段代码,会返回切分标记[4, 8, 10],对应原表中第4、8、10行的位置,也就是value=100出现的位置。
  2. 按标记拆分数据
    用numpy的split方法可以直接按照给定的索引位置拆分DataFrame:
    import numpy as np
    # 按照触发位置切分原表
    raw_slices = np.split(df, trigger_idx)
    # 过滤切分产生的空块(通常是连续出现两个value=100的情况才会生成空块)
    slices = [slice_df for slice_df in raw_slices if len(slice_df) > 0]
    
    对你的示例数据集,切分后会得到4个独立的数据块:
    • 原表第0-3行:time=[4,10,15,6], value=[0,0,0,50]
    • 原表第4-7行:time=[0,20,40,11], value=[100,0,0,70]
    • 原表第8-9行:time=[9,12], value=[100,0]
    • 原表第10-11行:time=[11,25], value=[100,20]

适合存储切片的最优数据结构

列表嵌套独立DataFrame 是最适配后续绘图操作的存储结构,优势很明确:

  • 每个切片完整保留原表的列结构(time、value),后续绘图、计算时直接按列名取数就行,和操作单张表的逻辑完全一致,没有额外适配成本
  • 列表的有序性天然匹配切分的先后顺序,不需要手动给每个切片编序号,遍历处理时天然按切分顺序执行
  • 不存在不同切片长度不一致的兼容问题,相比“把所有切片存在一张大表、加切片标识列”的方案,不会因为短切片填充无意义的空值,绘图时也不会出现多余的断点

后续绘图的操作示例

切片存在列表里后,直接循环遍历列表,就能把所有切片绘制在同一张图中:

import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
for slice_id, slice_data in enumerate(slices):
    plt.plot(slice_data['time'], slice_data['value'], marker='o', label=f'第{slice_id+1}个切片')
plt.xlabel('time')
plt.ylabel('value')
plt.legend()
plt.show()

如果你的切分规则不是“取两个相邻触发点之间的全部数据”,而是“从每个value=100的位置开始,往后取固定长度的数据作为切片”,只需要把上面的切分逻辑改成循环每个触发索引、按固定长度截取行,同样存在这个列表里就行,后续绘图的逻辑完全不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 15:45:06