我正在尝试删除重复的连续元素并使用 pandas 保留数据框中的最后一个值

I am trying to remove duplicate consequtive elements and keep the last value in data frame using pandas

数据框中有两列,我正在尝试从“a”列中删除连续的元素,并从“b”列中删除相应的元素,同时仅保留最后一个元素。

import pandas as pd
a=[5,5,5,6,6,6,7,5,4,1,8,9]
b=[50,40,45,87,88,54,12,75,55,87,46,98]
df = pd.DataFrame(list(zip(a,b)), columns =['Patch', 'Reward'])
df=df.drop_duplicates(subset='Patch', keep="last")
df = df.set_index('Patch')
print (df)

当我 运行 我得到:

       Reward
Patch        
6          54
7          12
5          75
4          55
1          87
8          46
9          98

然而,我想要的是:

Patch      Reward
5           45
6           54
7           12
5           75
4           55
1           87
8           46
9           98

PS:我不希望删除系列中另一个元素之后或后面重复的重复元素,而是只删除连续的重复元素,同时保持最后一个出现在连续的外观中。 我也不希望它被排序,它们应该按照列表中相同的顺序出现。

您可以创建一个新列,为每组连续元素分配一个 id,然后执行 groupby 操作,然后进行 last 聚合。

a=[5,5,5,6,6,6,7,5,4,1,8,9]
b=[50,40,45,87,88,54,12,75,55,87,46,98]
df = pd.DataFrame(list(zip(a,b)), columns =['Patch', 'Reward'])
df["group_id"]=(df.Patch != df.Patch.shift()).cumsum()
df = df.groupby("group_id").last()

输出

Patch  Reward 
5      45
6      54
7      12
5      75
4      55
1      87
8      46
9      98