如何在Pandas中删除首个满足多条件行之后的所有行
Pandas 删除指定条件行之后的所有行
给定如下Pandas DataFrame:
Low isLower isPrevHigher isNextHigher 0 22470.0 True False True 1 22480.0 NaN False True 2 22576.6 NaN False True 3 22600.4 NaN False False 4 22583.5 NaN True True 5 22652.2 NaN False True 6 22656.8 NaN False False 7 22646.5 NaN True False 8 22600.0 NaN True False 9 22555.0 NaN True True 10 22580.1 NaN False True 11 22620.0 NaN False True 12 22682.2 NaN False False 13 22681.0 NaN True True 14 22710.8 NaN False False 15 22657.2 NaN True False 16 22623.0 NaN True True 17 22634.0 NaN False True 18 22660.0 NaN False True 19 22673.6 NaN False True 20 22721.2 NaN False False 21 22580.0 NaN True False 22 22552.6 NaN True False 23 22382.6 True True False 24 22353.0 True True False 25 22341.7 True True False 26 22312.4 True True False 27 22256.4 True True True 28 22310.6 True False False 29 22286.0 True True True 30 22306.8 True False True 31 22386.3 True False False
需求是:删除首个满足isLower == True、isPrevHigher == True且isNextHigher == True的行之后的所有行,即保留第27行及之前的内容。
解决方案
- 筛选出同时满足三个条件的行,获取它们的索引列表
- 提取列表中的第一个索引值(即首个符合条件的行的位置)
- 截取DataFrame到该索引位置(包含该行)
代码实现
import pandas as pd # 假设你的DataFrame名为df # 筛选符合条件的行,获取索引 target_indices = df[(df['isLower'] == True) & (df['isPrevHigher'] == True) & (df['isNextHigher'] == True)].index # 处理存在符合条件行的情况 if len(target_indices) > 0: first_target_idx = target_indices[0] # 截取到目标行,保留之前的所有内容 df_filtered = df.loc[:first_target_idx] else: # 无符合条件的行时,保留原DataFrame df_filtered = df.copy()
执行上述代码后,df_filtered就是保留了首个符合条件行及之前内容的结果。
内容的提问来源于stack exchange,提问作者One boy
相关产品推荐
相关产品推荐

