我正在尝试删除重复的连续元素并使用 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
数据框中有两列,我正在尝试从“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