假设我有一个包含以下列的数据帧:
- 动作("开始"、"结束"(
- 点(整数(
- 卡片(整数(假设数据帧如下所示:
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)