如何在Pandas DataFrame中删除特定值所在行及下一行?
解决Pandas DataFrame删除指定行及其下一行的问题
嘿,我来帮你搞定这个问题!你现在的代码只排除了Cat行的下一行,但Cat本身的行还留在DataFrame里,这就是为什么结果里还有那行Cat a。咱们来调整一下逻辑,同时删掉Cat行和它紧跟的下一行:
完整解决方案代码
import pandas as pd d = ({ 'Code' : ['Foo','Bar','Cat','Foo','Foo'], 'Int' : ['x','y','a','a','x'], }) df = pd.DataFrame(d) # 定位所有Code为'Cat'的行索引 cat_rows = df[df['Code'] == 'Cat'].index # 组合需要删除的索引:Cat行 + 它的下一行 to_remove = cat_rows.union(cat_rows + 1) # 删除目标行,可选重置索引让序号连续 result_df = df.drop(to_remove).reset_index(drop=True) print(result_df)
运行结果
Code Int 0 Foo x 1 Bar y 2 Foo x
逻辑解释
- 定位目标行:
cat_rows = df[df['Code'] == 'Cat'].index会拿到所有Code列值为Cat的行索引(这里是[2])。 - 扩展删除范围:
cat_rows + 1得到这些行的下一行索引(这里是[3]),用union()合并两组索引,确保不会有重复值(同时自动处理Cat在最后一行时,下一行索引超出DataFrame范围的情况,Pandas的drop会忽略不存在的索引)。 - 删除并整理结果:
drop(to_remove)删除所有目标行,reset_index(drop=True)可选,用来让结果的索引从0开始连续,不需要的话可以直接去掉这部分。
替代方案:布尔掩码写法
如果你更习惯用布尔筛选的方式,也可以这么写:
mask = ~df.index.isin(to_remove) result_df = df[mask]
最终效果和上面的代码完全一致。
内容的提问来源于stack exchange,提问作者jonboy
相关产品推荐
相关产品推荐

