如何筛选pandas数据后,同时获取符合条件行及后续10行数据
实现方案
你可以先定位所有符合筛选条件的行索引,再对每个索引扩展到后续10行的范围,去重后取数即可,代码如下:
import pandas as pd import numpy as np from sklearn.datasets import load_iris # 加载数据集 与你原有逻辑一致 iris = load_iris() data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target']) # 1. 生成筛选条件掩码,拿到所有匹配行的索引 mask = (data1['sepal length (cm)'] > 4) | (data1['sepal width (cm)'] > 3) match_indexes = data1[mask].index total_rows = len(data1) # 2. 收集所有需要返回的行索引,自动去重避免重叠范围重复返回 needed_indexes = set() for idx in match_indexes: # 处理边界:如果匹配行在数据集末尾不够10行,直接取到最后一行 end_idx = min(idx + 10, total_rows - 1) needed_indexes.update(range(idx, end_idx + 1)) # 3. 按原数据集顺序排序后取数得到结果 result = data1.iloc[sorted(needed_indexes)]
可选变体
如果你需要保留每个匹配行对应的分组(即每个匹配行+后续10行作为单独的子数据集,允许重叠行重复出现),可以用下面的写法:
result_groups = [] for idx in match_indexes: end_idx = min(idx + 10, total_rows - 1) # 每个元素为对应匹配行+后续10行的DataFrame result_groups.append(data1.loc[idx:end_idx])
内容的提问来源于stack exchange,提问作者user3234242
相关产品推荐
相关产品推荐

