如何在Pandas中删除my_class列值变化点前后n行?
解决Pandas DataFrame中删除类别变化前后n行的问题
我来帮你搞定这个需求!要实现识别my_class列类别变化的位置,并删除这些位置前后n行的功能,我们可以通过以下步骤用Pandas完成,这里以n=2为例:
步骤1:准备数据并定位类别变化的索引
首先,我们先创建你提供的DataFrame,然后通过diff()方法找到类别发生变化的起始索引——当my_class列的当前值与前一行不同时,diff()会返回非零值,我们就能提取这些位置的索引。
import pandas as pd # 创建你的DataFrame data = { 'my_class': [1,1,1,2,2,2,2,2,2,3,3,3], 'value': [1,2,3,4,5,6,7,8,9,10,11,12] } df = pd.DataFrame(data) # 找到类别变化的起始索引 change_indices = df[df['my_class'].diff() != 0].index.tolist() # 此时change_indices的结果是 [3, 9],对应从1→2、2→3的变化起始点
步骤2:生成需要删除的索引集合
接下来,我们根据每个变化索引,计算出需要删除的前后n行索引。需要注意边界情况(比如索引不能小于0或超过DataFrame的最大索引):
n = 2 to_drop = set() for idx in change_indices: # 添加变化点前n行的索引 start = max(0, idx - n) to_drop.update(range(start, idx)) # 添加变化点后n行的索引 end = min(df.index[-1], idx + n - 1) to_drop.update(range(idx, end + 1))
步骤3:过滤DataFrame得到结果
最后,我们保留不在删除集合里的行,就得到了预期的输出:
result = df[~df.index.isin(to_drop)] print(result)
运行后输出的结果完全符合你的预期:
my_class value 0 1 1 5 2 6 6 2 7 11 3 12
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

