【发布时间】:2020-02-17 22:16:46
【问题描述】:
我需要一些代码方面的认真帮助。
我有一个数据框,我想在其中查找 2 列的重复项 - 材料部件号和制造商。这些列具有空值。我需要查找重复项的方法如下。
- 我首先检查零件编号列中没有空值的行。因为我不希望空值被视为重复项
- 如果部件号匹配,对于两个相同的部件号,我会检查制造商列是否有重复。
- 如果两行或多行的制造商和部件号相同,我会将结果输出到称为重复级别的新列中。零件编号和制造商完全匹配的所有行的输出都很高。
- 但是,如果部件号匹配而制造商不匹配,则列中的输出为“中等”。
- 如果部件号本身不匹配,则重复级别为“无重复”
- 此外,对于部件号或制造商中为 NA 的行,将重复级别设置为“无重复”以防部件号和“中等”以防制造商。
这是我的输入表 enter image description here
我写的代码是
`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'`
我需要的输出是 enter image description here
我得到的输出是 enter image description here
正如您在以黄色突出显示的行中所见,我的代码不是在一个特定/唯一部件号内比较制造商,而是在所有部件号中进行比较,我不希望它这样做。我知道 .duplicated() 函数会针对整个列进行比较,但是如果我希望它在每个唯一部件号内进行比较然后找到匹配项怎么办?更多的是重复的 groupby?谁能帮我修改我写的代码?
非常感谢。
【问题讨论】:
标签: python group-by duplicates