在列中跨多个组查找重复项-Python
我需要一些非常认真的代码帮助 我有一个数据框,在其中我想在两列中找到重复项-材料零件号和制造商。这些列有空值。我需要找到副本的方法如下在列中跨多个组查找重复项-Python,python,group-by,duplicates,Python,Group By,Duplicates,我需要一些非常认真的代码帮助 我有一个数据框,在其中我想在两列中找到重复项-材料零件号和制造商。这些列有空值。我需要找到副本的方法如下 我首先检查partnumber列中没有空值的行。因为我不希望将空值视为重复值 如果零件号匹配,对于两个相同的零件号,我检查“制造商”列中是否有重复的零件号 如果两行或更多行的制造商号和零件号都相同,我会将结果输出到一个名为levelofduplicity的新列中。零件号和制造商完全匹配的所有行的输出都很高 但是,如果零件号匹配而制造商不匹配,则列中的输出为“中等
`for i in range(len(df)):
if pd.isnull(df.loc[i,'Material Part Number'])==False:
if (df['Material Part Number'].duplicated(keep=False))[i]==True:
if pd.isnull(df.loc[i,'Manufacturer'])==False:
if (df['Manufacturer'].duplicated(keep=False))[i]==True:
df.loc[i,'Level of Duplicacy']='High'
else:
df.loc[i,'Level of Duplicacy']='Moderate'
else:
df.loc[i,'Level of Duplicacy']='Moderate'
else:
df.loc[i,'Level of Duplicacy']='Not duplicate'
else:
df.loc[i,'Level of Duplicacy']='Not duplicate'`
我需要的输出是
我得到的结果是
正如您在以黄色突出显示的行中所看到的,我的代码不是在一个特定/唯一的零件号内比较制造商,而是在所有零件号之间进行比较,我不希望它这样做。我知道.duplicated()函数会对整个列进行比较,但是如果我希望它在每个唯一的零件号内进行比较,然后找到匹配项,该怎么办?更像是一个重复的groupby?你们中有人能帮我修改我写的代码吗
非常感谢。在数据框中运行循环需要对每个项目进行元素级比较。我建议使用矩阵代数来实现这一点。看看下面,这可能会有所帮助
df["Level of Duplicacy"] = "Not Duplicate"
Partdups = df.loc[df["Material Part Number"].duplicated(),"Material Part Number"].unique()
for dup in Partdups:
Nums = df.loc[df["Material Part Number"] == dup,:]
dupNums = Nums.loc[Nums["Manufacturer"].duplicated(),"Manufacturer"].unique()
for num in dupNums:
Nums.loc[Nums["Manufacturer"] == num,"Level of Duplicacy"] = "High"
Nums.loc[Nums["Manufacturer"] != num,"Level of Duplicacy"] = "Moderate"
df.iloc[Nums["Material Part Number"].index,:] = Nums
df.loc[pd.isnull(df["Material Part Number"]),"Level of Duplicacy"] = "Not Duplicate"
嗨,你能定义统计数据吗?抛出一个错误。另外,“data”变量与初始数据帧相同,在函数中也是“df”,对吗?对于这些错误,很抱歉,这是因为在我这边的不同数据集上测试它。请看一看修改后的代码,然后再次运行。您好,由于状态未定义,仍然会抛出错误。您能告诉我在我的数据集中指示了哪个变量吗?Partdups是一个包含重复制造商编号的列表。Nums列表包含所有重复的物料编号。然后我们循环浏览这两个列表。“状态”一栏指的是您的物料零件号。您好,谢谢您的代码,尝试运行它。但它也将列中的NAs视为重复和。重复为NAs提供了True。我不能明确排除制造商为NA的行。因为正如我所说,如果零件号匹配且制造商为NA,我仍然希望重复性水平适中。你能看看我在上述问题中所要求的算法,并建议相应地修改代码吗?我会重新运行并让您知道