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

如何在Pandas中设置滑动窗口每三行遍历并应用自定义函数?

处理Pandas DataFrame按每3行分组并应用函数的方案

首先得先清理掉数据里的分隔行(--行),它们只是分组标记,不属于有效业务数据:

import pandas as pd

# 假设你的原始DataFrame命名为df
df = df[(df['A'] != '--') & (df['measure'] != '--')]

接下来我们把清理后的DataFrame按每3行拆分成独立分组,这里用numpy的array_split就能轻松实现:

import numpy as np

# 按每3行一组拆分数据
groups = np.array_split(df, len(df) // 3)

现在groups里的每个元素都是包含3行数据的子DataFrame了,接下来就可以遍历这些分组,把你的自定义函数套进去。举个例子,假设你想提取每组的名称、前后measure值以及A列的范围,函数可以这么写:

def process_single_group(group):
    # 提取组内的名称(就是那行带name的记录)
    group_name = group[group['measure'].str.startswith('name')]['measure'].iloc[0]
    # 提取组内的两个measure数值
    measure_vals = group[~group['measure'].str.startswith('name')]['measure'].values
    # 提取A列的数值范围
    a_range = (group['A'].min(), group['A'].max())
    
    # 按你的需求返回处理结果,这里可以自由调整结构
    return {
        '名称': group_name,
        '起始measure值': measure_vals[0],
        '结束measure值': measure_vals[1],
        'A列范围': a_range
    }

# 遍历所有分组,批量应用函数
processed_results = [process_single_group(g) for g in groups]

# 把结果转成DataFrame,方便后续查看和分析
result_df = pd.DataFrame(processed_results)

如果你的measure列是混合类型(数值+字符串),怕类型转换出问题,可以提前做个处理:

# 把能转成数值的转成float,不能转的(比如name)保留为NaN,后续再单独提取
df['measure'] = pd.to_numeric(df['measure'], errors='coerce')

要是你不想提前删除分隔行,也可以直接定位有效行的索引来分组:

# 先标记出所有有效行的位置
valid_rows = (df['A'] != '--') & (df['measure'] != '--')
# 提取有效行的索引
valid_indices = df[valid_rows].index
# 把有效索引按每3个一组拆分
group_indices = np.array_split(valid_indices, len(valid_indices) // 3)
# 通过索引获取每组数据
groups = [df.loc[idx] for idx in group_indices]

这样不管原始数据里的分隔行怎么分布,都能精准拿到每3行一组的有效数据,再套用你的业务函数就好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:53