我有2个导入到DataFrames中的Excel文件。 一个是我的主要数据集,另一个是查找数据集。 我处理这两个文件以创建CN ON列,这成为我的关键。 查找数据集得到处理,处理后我将删除重复项。 我想将“ Code列引入主数据集。 如果一个CN ON与多个Code值相关联,则将其分配给'Multiple' 。 如果FO = 'R1' ,则使Code = 'R1' 。 如果关联的CN ON没有代码值,则使Code = 'NONE' 。 对于任何不正确的术语,我也深表歉意!
主数据集
df2 = pd.DataFrame({'CN ON': ['WD-D5','JF-04','P5','PK-E4','UL-G8','MD-ZZ'],
'D1': ['D1','D2','D3','D4','D5','D6']
})
查找数据集
df = pd.DataFrame({'CN': ['WD','JG','P5','PK','PK','UL','UL'],
'ON': ['D5','04','','E4','E4','G8','G8'],
'FO': ['A','A','A','A','A','R','R'],
'Code': ['D1','YZ','YZ','HY','PB','SA','SA'],
'CN ON': ['WD-D5','JF-04','P5','PK-E4','PK-E4','UL-G8','UL-G8']
})
当前
CN ON是我的键,然后Code是我要查找的值。 我试图在将数据集连接在一起之前修改df2 。 如果FO = 'R1' ,则设置Code = 'R1' 。 如果一个CN ON与不同的Code值相关联,则为所有实例分配Code = 'MULTIPLE' 。
然后将产生下面的DataFrame。
然后,我将删除重复的行,这将产生一列唯一的CN ON值。 然后,我将DataFrames连接在一起。
#Remove duplicates
df2.drop_duplicates(inplace=True)
带有Code查找的CN ON唯一列表。
#Left join the two DataFrames, with the Main Data Set being on the left on the 'CN ON' column
combined = pd.merge(df,df2[['CN ON','Code']], on = 'CN ON',how='left')
#If no 'Code' exists, then replace the 'NaN' values with 'NONE'
combined.update(combined[['Code']].fillna('NONE'))
所需结果
我当然可以接受其他解决方案,但这在我看来在逻辑上是有意义的。 我在修改df2以使用Code或'Multiple'更新Code列时遇到麻烦。 任何指导或协助将不胜感激! 在这个过程中,我学到了很多东西,并且我获得了StackOverflow的大量帮助。 感谢大家的耐心配合!