如何修改Pandas的drop_duplicates以仅删除连续重复行?
如何在Pandas中仅删除DataFrame的连续重复行?
你需要删除DataFrame中的连续重复行(而非所有重复行),示例输入和期望输出如下:
输入DataFrame:
| A header | Another header |
|---|---|
| First | el1 |
| Second | el2 |
| Second | el8 |
| First | el3 |
| Second | el4 |
| Second | el5 |
| First | el6 |
| Second | el9 |
期望输出:
| A header | Another header |
|---|---|
| First | el1 |
| Second | el2 |
| First | el3 |
| Second | el4 |
| First | el6 |
| Second | el9 |
之前用循环实现的方案效率较低,推荐使用Pandas原生的向量化操作来解决:
解决方案代码:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'A header': ['First', 'Second', 'Second', 'First', 'Second', 'Second', 'First', 'Second'], 'Another header': ['el1', 'el2', 'el8', 'el3', 'el4', 'el5', 'el6', 'el9'] }) # 筛选出与上一行不重复的行 filtered_df = df[df.ne(df.shift()).any(axis=1)] print(filtered_df)
代码说明:
df.shift():将DataFrame的行整体下移一行,第一行填充为NaNdf.ne(df.shift()):逐元素对比原DataFrame和下移后的DataFrame,值不同则返回True,生成布尔矩阵.any(axis=1):按行判断,只要该行有任意一列与上一行不同,就返回True- 最后用这个布尔序列筛选原DataFrame,即可得到仅保留非连续重复行的结果
这个方案基于Pandas的向量化运算,底层依赖numpy实现,比Python循环效率高一个数量级以上,尤其适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者hurricane133
相关产品推荐
相关产品推荐

