首页 > 解决方案 > Pandas 部分删除重复值

问题描述

我有一个数据框

df=pd.DataFrame({'A':[1, 3, 3, 4, 5, 3, 3],
                 'B':[0, 2, 3, 4, 5, 6, 7],
                 'C':[7, 2, 2, 5, 7, 2, 2]})

我想从列 A 和 C 中删除重复的值。但是,我希望它部分工作。

如果我使用

df.drop_duplicates(subset=['A','C'], keep='first')

它将删除第 2、5、6 行。但是,我只想删除第 2 行和第 6 行。所需的结果如下:

df=pd.DataFrame({'A':[1, 3, 4, 5, 3],
                 'B':[0, 2, 4, 5, 6],
                 'C':[7, 2, 5, 7, 2]})

标签: pythonpandas

解决方案


这是使用shift执行此操作的方法:

df.loc[(df[["A", "C"]].shift() != df[["A", "C"]]).any(axis=1)].reset_index(drop=True)

输出:

   A  B  C
0  1  0  7
1  3  2  2
2  4  4  5
3  5  5  7
4  3  6  2

这个问题是一个很好的参考。


推荐阅读