我有两个数据帧mapp
和data
,如下所示
mapp = pd.DataFrame({'variable': ['d22','Studyid','noofsons','Level','d21'],'concept_id':[1,2,3,4,5]})
data = pd.DataFrame({'sourcevalue': ['d22heartabcd','Studyid','noofsons','Level','d21abcdef']})
我想从data
中获取一个值,并检查它是否存在于mapp
中,如果存在,则获取相应的concept_id
值。优先级是首先查找exact match
。如果找不到匹配项,则转到substring match
。因为我要处理超过一百万条记录,任何可缩放的解决方案都是有用的
s = mapp.set_index('variable')['concept_id']
data['concept_id'] = data['sourcevalue'].map(s)
产生如下输出
当我进行子串匹配时,有效记录也会变成NA,如下所示
data['concept_id'] = data['sourcevalue'].str[:3].map(s)
我不知道为什么它现在给有效记录NA
如何才能优雅高效地同时完成这两项检查
我希望我的输出如下所示
试试这个。在这种情况下,我们将在第一个映射之后定位NA值;对它们进行子字符串映射
如果需要按字符串和前3个字母映射,请创建2个单独的序列,然后使用^{} 或^{} 将
a
中缺少的值替换为b
:编辑:
使用^{} 函数,我编写了:
输出
链接答案中使用的函数:
相关问题 更多 >
编程相关推荐