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

如何使用Pandas通过groupby压缩数据集并实现去重?

实现DataFrame的多列去重(压缩数据集)

原始数据集

id  box     status
aa  box11   hey
aa  box11   hey
aa  box11   hey
aa  box11   hey
aa  box5    hello
aa  box5    hello
aa  box5    hello
aa  box5    hello
aa  box5    hello
bb  box8    no
bb  box8    no

期望输出

id  box     status
aa  box11   hey
aa  box5    hello
bb  box8    no

你的尝试代码(存在语法错误)

df1 = df.groupby(["id"])["box"]]).agg()

正确实现方法

方法1:直接用drop_duplicates()(最简洁高效)

你的需求本质是保留id、box、status三列的唯一组合,直接用去重方法最直观:

df1 = df.drop_duplicates(subset=["id", "box", "status"])

如果需要重置结果的索引,可追加参数:

df1 = df.drop_duplicates(subset=["id", "box", "status"]).reset_index(drop=True)

方法2:用groupby实现

如果一定要通过groupby完成,需要按所有目标列分组,再取每组的任意一行(因为组内数据完全重复):

df1 = df.groupby(["id", "box", "status"]).first().reset_index()

也可以用agg()指定取组内第一个元素:

df1 = df.groupby(["id", "box", "status"]).agg("first").reset_index()

问题说明

你的原代码存在两个问题:

  1. 语法错误:多了一个冗余的闭合括号,正确写法应为df.groupby(["id"])["box"]
  2. 分组逻辑错误:仅按id分组无法区分同一id下不同的box和status组合,必须同时按三列分组才能得到目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:42