基于列条件Panda删除重复项



假设我有一个包含以下列的数据帧:

  • 动作("开始"、"结束"(
  • 点(整数(
  • 卡片(整数(假设数据帧如下所示:
Action  points  cards
start   1       1
start   2       2
start   2       3
end     1       1
end     2       2
end     2       3

我想删除所有具有重复点值的行,但仅当操作等于开始时。因此,所需输出为:

Action  points  cards
start   1       1
start   2       2
end     1       1
end     2       2
end     2       3

以下命令不起作用:

df[df["action"] == "start"].drop_duplicates(["points"]) # no effect
df[df["action"] == "start"].drop_duplicates(["points"], inplace=True) # Error
df[df["action"] == "start"] = df[df["action"] == "start"].drop_duplicates(["points"]) # Adds a row of NaNs where there should be nothing

假设我不能只dropna(),我该怎么办?附加问题:假设我想去掉(start,2,2(行,而不是(start,2,3(行。我该怎么做?

将数据帧分为两部分,并在需要的部分删除重复项。Concat获取数据帧。请参见下文。

df_start = df[df.action=="start"] 
.orderby(["points"]) 
.drop_duplicates(["points"], keep="last")
df_rest = df[df.action!="start"]
df = pd.concat([df_start, df_rest], axis=0)

最新更新