如何在pandas dataframe中提取连续1序列之后最多2行的0值行
实现思路
先定位所有连续1序列的结束位置,再对每个结束位置取后续1-2行的记录,最后过滤出val为0的行即可。
完整代码
import pandas as pd # 构造示例数据,实际使用时替换为你自己的df即可 data = { 'Day': ['Day1','Day2','Day3','Day4','Day5','Day6','Day7','Day8','Day9','Day10', 'Day11','Day12','Day13','Day14','Day15','Day16','Day17','Day18','Day19','Day20', 'Day21','Day22','Day23','Day24','Day25'], 'val': [0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1] } df = pd.DataFrame(data) # 1. 标记连续1序列的结束行:当前行val为1,下一行val为0 end_of_one_seg = (df['val'] == 1) & (df['val'].shift(-1) == 0) # 拿到所有连续1结束行的索引 end_index_list = df[end_of_one_seg].index # 2. 收集每个结束行后面最多2行的索引 target_index = [] for end_idx in end_index_list: for offset in (1, 2): if end_idx + offset < len(df): target_index.append(end_idx + offset) # 3. 筛选结果,去重且保留val为0的行 result = df.loc[target_index].drop_duplicates().query('val == 0').reset_index(drop=True) print(result)
输出结果
Day val 0 Day9 0 1 Day10 0 2 Day16 0 3 Day17 0 4 Day22 0
内容的提问来源于stack exchange,提问作者rsp
相关产品推荐
相关产品推荐

