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

如何基于多次出现的flag=1条件提取Pandas DataFrame数据块?

提取Pandas DataFrame中连续的flag=1数据块

没问题,我来帮你搞定这个需求!要提取DataFrame中连续的flag=1数据块,我们可以通过生成分组标识+按组拆分的方法来实现,具体步骤和代码如下:

步骤1:生成连续块的分组ID

首先我们需要给每一段连续的flag=1数据分配一个唯一的分组ID,这样后续就能按ID拆分出各个数据块:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({"flag":[0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0], "Val":[1, 5, 7, 5, 4, 7, 8, 11, 13, 44, 7 , 8, 10, 14, 12]})

# 标记每个连续flag=1块的起始行,然后累加得到分组ID
df['group_id'] = (df['flag'] == 1) & (df['flag'].shift(1) == 0)
df['group_id'] = df['group_id'].cumsum()

这里的逻辑是:df['flag'].shift(1)会把flag列向上偏移一行,当当前行flag=1且上一行flag=0时,就说明这是一个新的连续1块的开始,我们用这个条件生成布尔值,再通过cumsum()把这些起始点累加,得到每个块的唯一ID。

步骤2:筛选并拆分数据块

接下来我们筛选出所有flag=1的行,然后按group_id分组,就能得到各个独立的数据块:

# 筛选flag=1的行,按group_id分组后转成列表
chunks = [group for _, group in df[df['flag'] == 1].groupby('group_id')]

步骤3:查看结果

你可以通过循环来打印每个数据块:

for idx, chunk in enumerate(chunks, start=1):
    print(f"Chunk {idx}")
    # 只展示Val和flag列(可选)
    print(chunk[['Val', 'flag']])
    print("\n")

运行后输出的结果就是你想要的:

Chunk 1
Val flag
2 7 1
3 5 1
4 4 1
5 7 1

Chunk 2
Val flag
9 44 1
10 7 1
11 8 1
12 10 1

这样得到的chunks是一个列表,每个元素都是一个独立的DataFrame,你可以单独对每个块进行后续处理~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:47:41