使用python删除重复的单元格内容?

时间:2020-08-04 12:52:37

标签: python pandas

我过滤掉重复项,在同一行上得到重复项,并用逗号连接项目,并使用下面的这段代码,真的不理解为什么要复制Join_Dup列吗?

dd = sales_all[sales_all['Order ID'].duplicated(keep=False)]
dd['Join_Dup'] = dd.groupby('Order ID')['Product'].transform(lambda x: ','.join(x))
print(dd.head())

dd = dd[['Order ID','Join_Dup']].drop_duplicates()
dd




     Order ID                                           Join_Dup
0        176558  USB-C Charging Cable,USB-C Charging Cable,USB-...
2        176559  Bose SoundSport Headphones,Bose SoundSport Hea...
3        176560  Google Phone,Wired Headphones,Google Phone,Wir...
5        176561  Wired Headphones,Wired Headphones,Wired Headph...
...         ...                                                ...
186846   259354          iPhone,iPhone,iPhone,iPhone,iPhone,iPhone
186847   259355          iPhone,iPhone,iPhone,iPhone,iPhone,iPhone
186848   259356  34in Ultrawide Monitor,34in Ultrawide Monitor,...
186849   259357  USB-C Charging Cable,USB-C Charging Cable,USB-...

[178437 rows x 2 columns]

我需要从每行的单元格中删除重复项,请提供一些帮助。

2 个答案:

答案 0 :(得分:0)

编辑忽略答案的第二部分。如果最终没有用,我将删除该部分。

因此,您注释每个订单ID都需要唯一的产品字符串。您可以一步一步得到它:

dd = (
    sales_all.groupby(['Order ID', 'Product'])['some_other_column']
        .size().rename('quantity').reset_index()
    )

现在,您具有OrderID /产品的唯一行,其中包含重复产品(或数量,如常规发票)的数量。您可以使用它,也可以分组依据来形成产品列表:

orders = dd.groupby('Order ID').Product.apply(list)

---应用与转换---

请注意,如果按照问题中的说明使用.transform,则结果将始终具有与要分组的数据框/系列相同的形状(即,分组将相反,并且最终得到相同的数字)行,从而创建重复项)。函数.apply会将您的groupby组传递给相同的函数(任何函数),但不会广播回原始形状(每个组仅返回一行)。


旧答案

因此,您要删除出现在多行中的所有Oder ID(如果ID 14出现在两行中,则将丢弃这两行)。这样会使下一行的groupby变得多余,因为每个分组的ID都只有一行。

好吧,现在已经解决了。然后,假设Product中的每一行都包含一个要与lambda连接的列表。使用pandas本机功能,此步骤会更快一些。

dd['Join_Dup'] = dd.Product.str.join(', ')
# perhaps choose a better name for the column, once you remove duplicates it will not mean much (does 'Join_Products' work?)

现在可以处理重复项。如果您要删除的是公仔,则实际上并不需要参加最后一步。熊猫也可以处理列表。但是您缺少的部分是subset属性。

dd = dd[['Order ID', 'Join_Dup']].drop_duplicates(subset='Join_Dup')

答案 1 :(得分:0)

IIUC,让我们尝试防止groupby transform语句中出现重复项:

dd['Join_No_Dup'] = dd.groupby('Order ID')['Product'].transform(lambda x: ','.join(set(x)))
相关问题