如何使用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()
问题说明
你的原代码存在两个问题:
- 语法错误:多了一个冗余的闭合括号,正确写法应为
df.groupby(["id"])["box"] - 分组逻辑错误:仅按
id分组无法区分同一id下不同的box和status组合,必须同时按三列分组才能得到目标结果
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

