如何删除特定列非空行前的所有行?附Pandas实操示例
如何删除某列中遇到指定值之前直到另一列有效值的所有行?
需求说明
当column2中出现'Barrier'时,删除该行之前直到column1出现有效值的所有行(即从最近的column1有效值的下一行,到Barrier行本身都需要删除)。
示例数据
import pandas as pd df1 = pd.DataFrame([ ['A', 'x' ], [None, 'x' ], [None, 'Barrier' ], ['A', 'x' ], [None, 'x' ], [None, 'x' ], ['A', 'x' ], [None, 'x' ], [None, 'x'], [None, 'x'], ['B', 'x'], [None, 'x'], [None, 'x'], ['B', 'x'], [None, 'x'], [None, 'Barrier'], [None, 'x'], ['C', 'x'], [None, 'x'], [None, 'x']], columns=['column1', 'column2'])
解决方案代码
# 获取所有Barrier行的索引 barrier_indices = df1[df1['column2'] == 'Barrier'].index # 获取所有column1非空行的索引 valid_col1_indices = df1[df1['column1'].notna()].index # 存储需要删除的索引 to_drop = set() for idx in barrier_indices: # 找到当前Barrier之前最近的column1有效值索引 last_valid = valid_col1_indices[valid_col1_indices < idx].max() # 把last_valid之后到当前Barrier的所有索引加入删除列表 to_drop.update(range(last_valid + 1, idx + 1)) # 删除指定行并重置索引 result_df = df1.drop(to_drop).reset_index(drop=True) # 查看结果 print(result_df)
代码逻辑说明
- 先定位所有
Barrier行和column1有有效值的行的位置; - 遍历每个
Barrier,找到它前面最近的column1有效值行,确定需要删除的区间(有效值下一行到Barrier行); - 删除这些区间内的行并重置索引,得到最终结果。
内容的提问来源于stack exchange,提问作者pyflo
相关产品推荐
相关产品推荐

