首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我正在尝试删除重复的后果性元素,并使用pandas保留数据框中的最后一个值

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

Stack Overflow用户
提问于 2021-05-09 05:17:22
回答 1查看 37关注 0票数 0

数据帧中有两列,并且我试图从列"a“中删除连续的元素,并从列"b”中删除其对应的元素,同时只保留最后一个元素。

代码语言:javascript
代码运行次数:0
运行
复制
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)

当我运行这个命令时,我得到:

代码语言:javascript
代码运行次数:0
运行
复制
       Reward
Patch        
6          54
7          12
5          75
4          55
1          87
8          46
9          98

然而,我想要的是:

代码语言:javascript
代码运行次数:0
运行
复制
Patch      Reward
5           45
6           54
7           12
5           75
4           55
1           87
8           46
9           98

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-09 05:28:07

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

代码语言:javascript
代码运行次数:0
运行
复制
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()

输出

代码语言:javascript
代码运行次数:0
运行
复制
Patch  Reward 
5      45
6      54
7      12
5      75
4      55
1      87
8      46
9      98 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67452237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档