You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中基于其他列值去重,保留name列值为foo的记录

优化方案说明

你的核心需求是移除duplicates列的重复项,仅保留name为"foo"的记录。现有代码存在不必要的数据修改和冗余操作,以下是更简洁高效的优化方案:

方案一:先筛选再去重(最简洁)

直接先筛选出name等于"foo"的记录,再对duplicates列去重,完全匹配你的需求:

import pandas as pd

df = pd.DataFrame(
    {"name": ["foo", "bar", "foo", "baz"], "duplicates": ["qux", "qux", "fred", "fred"]}
)

# 先筛选name为foo的记录,再去除duplicates列的重复项
result = df[df["name"] == "foo"].drop_duplicates("duplicates")

执行后结果:

nameduplicates
fooqux
foofred

方案二:按组优先保留foo记录(更灵活)

如果你的需求是:对每个重复的duplicates组,优先保留name为"foo"的记录(若存在),无foo则丢弃整组,可以用分组实现:

import pandas as pd

df = pd.DataFrame(
    {"name": ["foo", "bar", "foo", "baz"], "duplicates": ["qux", "qux", "fred", "fred"]}
)

# 按duplicates分组,优先选择foo记录,无则丢弃
result = df.groupby("duplicates").apply(
    lambda x: x[x["name"] == "foo"].head(1) if (x["name"] == "foo").any() else pd.DataFrame()
).reset_index(drop=True)

现有代码的问题点

  1. 不必要地将name列映射为"a",破坏了原始数据的完整性
  2. 使用inplace=True会修改原DataFrame,容易引发副作用,更推荐赋值新变量
  3. 排序操作冗余,直接针对需求筛选/分组即可达到目的

内容的提问来源于stack exchange,提问作者Blob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:50:16