删除排序的DataFrame中的相邻重复项

时间:2020-10-22 12:07:46

标签: python python-3.x pandas

之前已经讨论了删除相邻重复项,但仅针对直接相邻({3}上下)。

我有以下数据框:

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是否相同。但我正在寻找一种有效的解决方案,因为它将应用于数百万行。

3 个答案:

答案 0 :(得分:4)

请尝试

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

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

尝试使用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
相关问题