如何在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
相关产品推荐
相关产品推荐

