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

如何用循环基于指定索引拆分Pandas DataFrame并校验条件

问题描述

现有如下Pandas DataFrame,已筛选得到分割值列表re_ind(值为[85, 512]),需要完成两个操作:

  1. 基于该列表将原DataFrame拆分为多个子DataFrame,例如:index列值小于85的部分、介于85和512之间的部分、大于等于512的部分(注:原代码中自定义了index列,需注意区分DataFrame自带行索引与该自定义列);
  2. 对每个子DataFrame,校验diff_in_min列的求和结果是否大于500,统计符合条件的子表数量。

需要通过循环实现上述创建子DataFrame并校验条件的操作。

附修正后原代码:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['index'] = [0, 28, 35, 49, 85, 105, 208, 386, 419, 512, 816, 888, 914, 989]
df['diff_in_min'] = [5, 35, 42, 46, 345, 85, 96, 107, 119, 325, 8, 56, 55, 216]
df['val_1'] = [5, 25, 2, 4, 2, 5, 69, 6, 8, 7, 55, 85, 8, 67]
df['val_2'] = [8, 89, 8, 5, 7, 57, 8, 57, 4, 8, 74, 65, 55, 74]
# 修正原代码中re_ind的错误格式,转为目标分割值列表
re_ind = [85, 512]
解决方案

步骤1:构建完整分割区间

给re_ind添加首尾边界(负无穷、正无穷),确保所有数据行都能被覆盖到对应区间。

步骤2:循环拆分并校验条件

遍历每个区间,筛选出对应子DataFrame,计算diff_in_min列的和,判断是否大于500并统计符合条件的数量。

完整实现代码:

import pandas as pd
import numpy as np

# 初始化DataFrame
df = pd.DataFrame()
df['index'] = [0, 28, 35, 49, 85, 105, 208, 386, 419, 512, 816, 888, 914, 989]
df['diff_in_min'] = [5, 35, 42, 46, 345, 85, 96, 107, 119, 325, 8, 56, 55, 216]
df['val_1'] = [5, 25, 2, 4, 2, 5, 69, 6, 8, 7, 55, 85, 8, 67]
df['val_2'] = [8, 89, 8, 5, 7, 57, 8, 57, 4, 8, 74, 65, 55, 74]
re_ind = [85, 512]

# 构建包含首尾边界的分割点列表
split_points = [-np.inf] + re_ind + [np.inf]
count = 0

# 循环处理每个分割区间
for i in range(len(split_points) - 1):
    lower = split_points[i]
    upper = split_points[i+1]
    
    # 根据区间位置设置筛选条件,匹配需求的分割逻辑
    if i == 0:
        sub_df = df[df['index'] < upper]
    elif i == len(split_points)-2:
        sub_df = df[df['index'] >= lower]
    else:
        sub_df = df[(df['index'] >= lower) & (df['index'] < upper)]
    
    # 计算当前子表的diff_in_min总和并判断
    sum_diff = sub_df['diff_in_min'].sum()
    if sum_diff > 500:
        count += 1
        print(f"子表{i+1}符合条件,diff_in_min总和为{sum_diff}")
    else:
        print(f"子表{i+1}不符合条件,diff_in_min总和为{sum_diff}")

print(f"\n符合条件的子表数量:{count}")

代码说明

  • 首尾边界的添加避免了数据遗漏,确保所有行都能被分配到对应子表;
  • 针对不同区间位置设置的筛选逻辑,完全匹配需求中的分割规则;
  • 循环内完成子表创建、求和校验、计数的全流程操作,逻辑清晰易维护。

运行结果

执行代码后会输出:

子表1不符合条件,diff_in_min总和为128
子表2符合条件,diff_in_min总和为752
子表3符合条件,diff_in_min总和为335

符合条件的子表数量:2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:31:21