Python 我试图删除重复的consequentive元素,并使用pandas保留数据帧中的最后一个值
数据框中有两列,我试图从列“a”中删除连续的元素,并从列“b”中删除相应的元素,同时只保留最后一个元素Python 我试图删除重复的consequentive元素,并使用pandas保留数据帧中的最后一个值,python,pandas,dataframe,drop-duplicates,Python,Pandas,Dataframe,Drop Duplicates,数据框中有两列,我试图从列“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=&qu
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','raward'])
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
groupby patch,保留每个组的最后一个元素?@ddg我猜通过分组,我将丢失数据的原始索引?显示错误TypeError:“Series”对象是可变的,因此无法散列发布完整的代码段抱歉,但是当我在代码中放入print(df)并执行它时,打印原始df,而不是所需df。分配数据帧
df=df.groupby(“组id”).last()
。还编辑了代码片段。非常感谢。现在它起作用了。