数据帧中有两列,并且我试图从列"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:我不希望重复的元素在系列中的另一个元素之后或更晚的时候被删除,但只删除连续的重复,同时保持最后一个出现在连续的外观中。我也不希望它被排序,它们应该以与列表中相同的顺序出现。
发布于 2021-05-08 21:28:07
您可以创建一个新列,为每组连续的元素分配一个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
https://stackoverflow.com/questions/67452237
复制相似问题