我要基于一个列(SKU)中的值合并两个数据框。 “ SKU”值各不相同。例如,SKU值的范围从“ 00047”到“ TPA20839”。但是,它们始终是字母数字。
当从csv文件读取数据帧时,我将“ SKU”列转换为字符串,以便它们在同一数据类型上合并。数据正确合并,但字符串值重叠时除外。
例如,有一个df_master ['SKU']值=“ 6748”。 df_inv ['SKU']->“ 6748”和“ 9006748”中有两个相似的值(两个不同的项目,6748 == 6748 9006784!= 6748)。
这将导致该行不出现在新数据框中。
我希望它完全匹配,类似于Excel中的= MATCH('','',0)函数。你能帮我实现这个目标吗?
df_master['SKU'] = df_master['SKU'].astype(str)
df_inv['SKU'] = df_inv['SKU'].astype(str)
df_new = pd.merge(df_inv, df_master, on='SKU')
df_new.to_csv('new-master.csv', sep=',', encoding='utf-8')
我认为诀窍可能是对数据类型设置不同的格式,但是我不确定。
答案 0 :(得分:0)
尝试一下:
vals_matched = []
haystacks = df_inv['SKU'].astype(str).tolist()
needles = df_master['SKU'].astype(str).tolist()
for needle in needles:
for haystack in haystacks:
if needle in haystack:
vals_matched.append(needle)
break
df_master = df_master[df_master.SKU.astype(str).isin(needles)]
break
语句继续到下一个needle
,即您要匹配的下一个值。原因是两个列表之间的一个匹配就足够了。