如何在pandas DataFrame中按列值删除连续重复行(仅保留一行)
解决连续重复行的保留问题
你需要的是仅去除连续重复的行,而非全局去重,drop_duplicates因为是全局范围去重,所以会删掉后续出现的非连续重复值(比如行5的cat),这显然不符合需求。
具体实现代码
首先构造示例DataFrame:
import pandas as pd data = { 'Column1': ['cat', 'cat', 'cat', 'dog', 'dog', 'cat'], 'Column2': ['A', 'B', 'C', 'D', 'E', 'F'] } df = pd.DataFrame(data)
然后用shift()方法对比当前行与前一行的Column1值,筛选出非连续重复的行:
# 筛选条件:当前行Column1与前一行不同,或者是第一行(避免第一行被误删) filtered_df = df[(df['Column1'] != df['Column1'].shift()) | (df.index == 0)]
执行后得到的结果就是你要的:
Column1 Column2 0 cat A 3 dog D 5 cat F
原理说明
df['Column1'].shift()会把Column1的所有值向下偏移一行,第一行变为NaN- 通过
df['Column1'] != df['Column1'].shift()可以找出所有与前一行值不同的行 - 加上
df.index == 0的条件,确保第一行无论如何都会被保留(因为NaN和任何值比较结果都是False,不加这个条件第一行会被过滤掉)
内容的提问来源于stack exchange,提问作者D. Schreiber
相关产品推荐
相关产品推荐

