之前已经讨论了删除相邻重复项,但仅针对直接相邻({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
是否相同。但我正在寻找一种有效的解决方案,因为它将应用于数百万行。
答案 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