首页 > 解决方案 > 删除熊猫中两列中包含的重复项

问题描述

我有一个包含两列的数据框。我想删除行,这样,对于每一行,它在第一列中只包含一个实例,但在第二列中包含所有唯一值。

这是一个例子:

data = [[1,100],
      [1,101],
      [1,102],
      [1,103],
      [2,102],
      [2,104],
      [2,105],
      [3,102],
      [3,107]]

df = pd.DataFrame(data,columns = ['x', 'y'])

数据框如下所示:

   x    y
0  1  100
1  1  101
2  1  102
3  1  103
4  2  102
5  2  104
6  2  105
7  3  102
8  3  107

输出数据框如下所示:

  x    y  inc
0  1  100    1
1  1  101    0
2  1  102    0
3  1  103    0
4  2  102    1
5  2  104    0
6  2  105    0
7  3  102    0
8  3  107    1

因此第 0 行将被包括(inc),因为第 x 列中尚未复制 1。第 1-3 行将被排除,因为 x 列中的 1 已经被考虑在内。将包括第 4 行,因为 x 列中的 2 尚未包括在内,并且 y 列 (102) 尚未包括在内(它作为重复项被排除在外)。在第 7 行,第 x 列中的 3 的第一个实例将被排除,因为第 4 行中已经考虑了 102(在 y 列中)。因此,我们将跳到第 8 行并包含它。

我尝试了多种.duplicated方法,但到目前为止没有一种方法奏效。如果您只取 x 列中某个值的第一个实例,您将排除应包含的行(例如第 7 行)。

任何帮助,将不胜感激。

标签: pythonpandas

解决方案


我相信您只会使用drop_duplicates其中的一个子集'x'并指定'first'将保留哪些行。

df.drop_duplicates(keep='first', subset = 'x')

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html


推荐阅读