擅长:python、mysql、java
<p>这有点类似于MaxU的方法(基于<code>replace()</code>),对于这个小例子,速度差不多,比johnchase慢</p>
<p>但您可能希望在更大、更真实的数据帧上进行测试。我只是把它扩展到1500行,这是最快的方法(其次是MaxU,然后是johnchase),但这可能不一定能保存您的实际数据。在</p>
<pre><code>equiv2 = dict( ( k.lower(), v ) for k,v in equiv.items() )
df['Map'] = df.WD.str.lower().replace( equiv2, regex=True )
df.loc[ df.Map == df.WD, 'Map' ] = ''
df['Exact'] = df.WD.isin(equiv).astype(int)
df
Out[166]:
drug_id WD Map Exact
0 lexapro.1 minor urin problem minor C0/ Urine 0
1 lexapro.1 Fatigue C0015672 / Fatigue 0
2 lexapro.1 disorientation C0233407 / Disorientation 1
3 lexapro.1 tiredness 0
4 lexapro.14 dizziness 0
5 lexapro.14 headaches C334 / headaches 0
</code></pre>
<p>第三行(<code>df.loc</code>)感觉有点多余或有点老套,但我无法找到一种方法使<code>replace</code>为不匹配项返回NaN或类似的值,所以我只是将“Map”转换为<code>''</code>,如果“WD”==“Map”。不应该拖得太慢,但似乎有更好的方法。。。在</p>