我有两个公司名称数据集,两者之间有命名差异(例如:Merck& Co. vs Merck& Co vs Merck& Co.,Inc。)
我正在尝试创建一个"地图"所有独特的变体" Merck"匹配" Merck& 。共#&34;
我目前的做法是创建一个字典,转换为数据帧,并理想地执行下面描述的转换:
Company 1 Company 2 Company 3
0 Co1 variant 0 Co1 variant 0 Co3 variant 0
1 Co1 variant 1 Co2 variant 1
2 Co1 variant 2
应该成为:
Company 1 Company 2 Company 3
Co1 variant 0 True True False
Co1 variant 1 True False False
Co1 variant 2 True False False
Co2 variant 0 False True False
Co2 variant 1 False True False
Co3 variant 0 False True True
从这里开始,如果每行中只有1 True
个值,我会将此命名变量与列标题匹配,否则我会将其与自身匹配;允许最终数据集看起来像
Variants Matched Name
0 Co1 variant 0 Co1 variant 0
1 Co1 variant 1 Company 1
2 Co1 variant 2 Company 1
3 Co2 variant 1 Company 2
4 Co3 variant 0 Company 3
提前感谢您的任何意见,如果问题不够明确,我也很乐意进一步澄清。
答案 0 :(得分:1)
您可以堆叠原始数据框,然后按行ID编号和变体分组,检查每组的行数,如果只有一行,则选择公司否则选择变体本身:
(df.stack().rename("Variants").rename_axis(("RowId", "Company")).reset_index()
.groupby(["RowId", "Variants"])
.apply(lambda g: g.Company.iloc[0] if g.Company.size == 1 else g.Variants.iloc[0])
.rename("Matched Names").reset_index().drop("RowId", axis = 1))