使用某些字段查找重复记录并使用 Pandas 库更改字段值

Posted

技术标签:

【中文标题】使用某些字段查找重复记录并使用 Pandas 库更改字段值【英文标题】:Find duplicate records using some field and change field value using Pandas library 【发布时间】:2020-06-13 18:08:55 【问题描述】:
Week_number   Holiday Description  Qty
38              1        A          5
38              0        A          6
38              0        B          1
38              1        C          1
40              0        A          1

我想查找相同 Week_number 和 Description 的重复项。如果我们以上述 Week_number 38 和 Desciption A 为例,则有 2 条记录。然后我想得到这 2 个数量的总和,所以它将是 11。 最后合并这两条记录,将 Qty 和 Holiday 的总和显示为 1。

Week_number   Holiday Description  Qty
38              1        A          11
38              0        B          1
38              1        C          1
40              0        A          1

再次检查 Week_number 38 的重复项,将有 3 条记录。并将 Holiday 更改为所有具有相同 Week_number 的记录中的 1 个。

Week_number   Holiday Description  Qty
38              1        A          11
38              1        B          1
38              1        C          1
40              0        A          1

任何cmets如何做到这一点? 谢谢

【问题讨论】:

您想如何聚合Holiday 列?对于Week_number 等于38,它可以是10。当您同时对Week_numberDescription 进行分组时,您希望如何聚合这些? 【参考方案1】:

查找week_number,其中holiday == 1。然后通过将Holiday 分配给该特定周数的1,将剩余的0 转换为1。最后一部分是根据子集 = ['Week_number','Description']

删除重复项
df['Qty'] = df.groupby(['Description','Week_number']).Qty.transform('sum')

cond = df.query('Holiday ==1').Week_number.unique()

df['Holiday'] = np.where(df.Week_number.isin(cond),1,df.Holiday)

df = df.drop_duplicates(['Week_number','Description'])

    Week_number Holiday Description  Qty
0       38          1       A        11
2       38          1       B         1
3       38          1       C         1
4       40          0       A         1

【讨论】:

感谢 ammywemmy 提供您的代码。当我执行它时,所有的 Holiday 值都变为 1,因为您检查了 week_number 和 description 的哪些行的大小大于 1。但我想要的是检查 week_number 和 description 的哪些行的 Holiday 值等于 1。如果任何行的值等于 1,则根据 week_number 和描述分组,将其他 Holiday 0 零字段也更改为 1。 是否可以假设 Holiday 列中只有两个值 0 和 1? 是的,感谢它成功运行的更新:)。尽管 df.drop_duplicates(['Week_number', 'Description'], keep="first", inplace=True),我改变了一些部分。它会在您的代码中保留两条重复记录。 是的,因为您需要将其分配回 df。我没有在上面的代码中

以上是关于使用某些字段查找重复记录并使用 Pandas 库更改字段值的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 如何查找并删除重复数据

PostgreSQL 如何查找并删除重复数据

选择语句以查找某些字段的重复项

使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一

Oracle SQL:对 CASE WHEN 重复使用子查询,而无需重复子查询

BigQuery:如何从重复记录中仅提取某些字段作为另一个重复字段