如何删除Pandas DataFrame指定列值与上一行相同的后续行
按指定列过滤相邻重复行
你可以通过shift()方法逐行对比指定列的取值,直接过滤掉和上一行指定列取值完全相同的行,实现方式如下:
原始测试数据
测试用DataFrame创建代码:
import pandas as pd data = {'ID': [1,2,3,4,5,6,7], 'feature1': [100,32,100,100,100,93,100], 'feature2': [100,32,100,100,100,93,100], 'feature3': [100,32,100,100,100,93,100], } df = pd.DataFrame(data)
原始DataFrame打印结果:
ID feature1 feature2 feature3 0 1 100 100 100 1 2 32 32 32 2 3 100 100 100 3 4 100 100 100 4 5 100 100 100 5 6 93 93 93 6 7 100 100 100
处理代码
# 定义需要判断重复的特征列 target_cols = ['feature1', 'feature2', 'feature3'] # 过滤保留和上一行目标列取值不完全相同的行,重置索引 df_result = df[~df[target_cols].eq(df[target_cols].shift()).all(axis=1)].reset_index(drop=True)
逻辑说明
df[target_cols].shift():将指定列的所有值向下偏移1行,每个位置存储原始数据上一行对应列的值eq():逐元素对比当前行和上一行的列值是否相等,返回布尔值组成的DataFrame.all(axis=1):按行判断三个列的对比结果是否全为True,即当前行三个列值和上一行完全一致~:对布尔结果取反,过滤掉和上一行完全重复的行;第一行偏移后为空值,不会被判定为重复,会自动保留
处理结果
打印df_result即可得到预期输出:
ID feature1 feature2 feature3 0 1 100 100 100 1 2 32 32 32 2 3 100 100 100 3 6 93 93 93 4 7 100 100 100
索引3、4的相邻重复行已被删除,符合需求。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

