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

Pandas处理百万级DataFrame:筛选连续符合条件行的问题求助

DataFrame按条件筛选连续符合要求的行并导出CSV

问题描述

我有一个包含300万条记录的DataFrame,包含A列和作为数据采集时间戳的B列,需按以下条件拆分处理:

  • 按A列分组后,丢弃成员数少于3的组;
  • 仅保留同一A列值下,B列时间戳小于7秒且连续记录数超过4的行,并保存为CSV文件。

现有代码能满足第一个条件,但第二个条件存在问题:当前代码会保存整个符合条件的分组,而非仅保存连续满足条件的目标行(如示例中仅需保存N组的最后5条连续符合条件的行)。

示例数据

Column AColumn B
D3
A2
A2
A8
A13
C15
D8
D6
F3
F14
F2
F5
F2
G20
B12
N15
N1
N2
N1
N2
N3

现有代码

# 过滤A列出现次数少于4次的记录
grouped = df.groupby('A')
for i in grouped.groups.keys():
    p = grouped.get_group(i)
    if len(p.index)>3:
        # 过滤B列值小于6的记录
        y= [len(list(g)) for k, g in groupby(p['Column B']<6) if k==True]
        if len(y) !=0: 
            if max(y)>4:
                p.to_csv('D:/TEST1/'f"{i}.csv", sep=';')

解决方案

核心是识别每个分组中连续满足B<7的片段,筛选出长度超过4的片段后仅导出这些行,修改后的代码如下:

import pandas as pd
from itertools import groupby

# 假设数据已加载到df中
# df = pd.read_csv("your_source_data.csv")

# 第一步:过滤掉A列分组成员数少于3的组
filtered_groups = df.groupby('A').filter(lambda x: len(x) >= 3)

# 第二步:遍历每个有效分组,筛选连续符合条件的行
for a_value, group in filtered_groups.groupby('A'):
    # 标记当前行是否满足B<7的条件
    group['is_valid'] = group['Column B'] < 7
    # 生成连续有效片段的分组ID:当is_valid状态变化时,ID加1
    group['segment_id'] = (group['is_valid'] != group['is_valid'].shift()).cumsum()
    # 筛选出全为有效状态且长度超过4的片段
    valid_rows = group.groupby('segment_id').filter(
        lambda seg: seg['is_valid'].all() and len(seg) > 4
    )
    # 如果存在符合条件的行,导出到CSV
    if not valid_rows.empty:
        # 可选:删除临时添加的is_valid和segment_id列
        valid_rows = valid_rows.drop(columns=['is_valid', 'segment_id'])
        valid_rows.to_csv(f'D:/TEST1/{a_value}.csv', sep=';', index=False)

代码说明

  1. 高效分组过滤:用groupby.filter直接过滤掉成员数不足3的分组,比循环遍历分组更适合处理300万条数据;
  2. 连续片段识别:通过对比当前行与上一行的is_valid状态,生成连续片段的ID,以此区分不同的连续块;
  3. 精准筛选片段:对每个片段检查是否全为有效行且长度超过4,只保留这些片段的行;
  4. 导出优化:导出时可以删除临时添加的辅助列,保证输出CSV的简洁性。

以示例中的N组为例,代码会仅保留最后5条连续满足B<7的行并导出,其他不符合条件的行(如N组第一条B=15的记录)会被丢弃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:10:33