使用某些字段查找重复记录并使用 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
,它可以是1
或0
。当您同时对Week_number
和Description
进行分组时,您希望如何聚合这些?
【参考方案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 库更改字段值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一