【问题标题】:Remove neighbouring duplicates in a sorted DataFrame [duplicate]删除已排序 DataFrame 中的相邻重复项 [重复项]
【发布时间】:2020-10-22 12:07:46
【问题描述】:

之前已经讨论过删除相邻重复项,但仅限于直接相邻(上/下一行)here

我有以下数据框:

df = pd.DataFrame(data={"item_no": [11, 4, 4, 4, 7, 8, 7, 11, 11, 5, 5, 6, 4], "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})

df:

    item_no time
0   11      1
1   4       2
2   4       3
3   4       4
4   7       5
5   8       6
6   7       7
7   11      8
8   11      9
9   5       10
10  5       11
11  6       12
12  4       13

它按time 列排序(将其想象为时间序列)。我需要删除item_no 列中的相邻重复项,只保留第一个条目。

预期输出:

    item_no time
0   11      1
1   4       2
2   7       5
3   8       6
4   7       7
5   11      8
6   5       10
7   6       12
8   4       13

可以看出,应该能够删除任意数量的相邻重复项。我知道我可以逐行迭代,并检查之前的item_no 是否相同。但我正在寻找一种有效的解决方案,因为这将应用于数百万行。

【问题讨论】:

  • 你试过 df.drop_duplicates('item_no', keep='First') 吗?
  • @Linden 这不仅仅是一个 drop 副本。它正在删除连续的重复项。

标签: python python-3.x pandas


【解决方案1】:

请尝试

df[df.item_no!=df.item_no.shift(1)]



   item_no  time
0        11     1
1         4     2
4         7     5
5         8     6
6         7     7
7        11     8
9         5    10
11        6    12
12        4    13

【讨论】:

    【解决方案2】:

    您可以使用 shift 来检测未更改的相邻条目。从那里直奔:

    df = pd.DataFrame(data={"item_no": [11, 4, 4, 4, 7, 8, 7, 11, 11, 5, 5, 6, 4], "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})
    
    ind = df['item_no']==df['item_no'].shift()
    df = df.loc[~ind]
    print(df)
    
        item_no  time
    0        11     1
    1         4     2
    4         7     5
    5         8     6
    6         7     7
    7        11     8
    9         5    10
    11        6    12
    12        4    13
    

    【讨论】:

      【解决方案3】:

      尝试使用shift

      df = df[df.shift(1) != df].dropna()
      print(df)
      
         item_no  time
      0       11     1
      1        4     2
      4        7     5
      5        8     6
      6        7     7
      7       11     8
      9        5    10
      11       6    12
      12       4    13
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-29
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2018-08-29
        • 1970-01-01
        相关资源
        最近更新 更多