<p>有了这个玩具数据集,我们想在<code>df2</code>中添加一个新列,它将包含前三行的<code>no_match</code>,最后一行将包含值<code>'d'</code>,因为该行的<code>col</code>值(字母<code>'a'</code>)出现在df1中。</p>
<pre><code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({'col': ['a', 'b', 'c', 'd']})
df2 = pd.DataFrame({'col': ['a123','b456','d789', 'a']})
</code></pre>
<p>换句话说,只有当行的<code>df2['col']</code>值出现在<code>df1['col']</code>的某个位置时,<code>df1</code>中的值才应该用于在<code>df2</code>中填充此新列。</p>
<pre><code>In [2]: df1
Out[2]:
col
0 a
1 b
2 c
3 d
In [3]: df2
Out[3]:
col
0 a123
1 b456
2 d789
3 a
</code></pre>
<p>如果这是理解您的问题的正确方法,那么您可以使用pandas<code>isin</code>:</p>
<pre><code>In [4]: df2.col.isin(df1.col)
Out[4]:
0 False
1 False
2 False
3 True
Name: col, dtype: bool
</code></pre>
<p>只有当<code>df2.col</code>中的值也在<code>df1.col</code>中时,此值才计算为<code>True</code>。</p>
<p>然后,如果您完全熟悉R,那么可以使用<code>np.where</code>,这或多或少与R中的<code>ifelse</code>相同。</p>
<pre><code>In [5]: np.where(df2.col.isin(df1.col), df1.col, 'NO_MATCH')
Out[5]:
0 NO_MATCH
1 NO_MATCH
2 NO_MATCH
3 d
Name: col, dtype: object
</code></pre>
<p>对于在<code>df1.col</code>中出现<code>df2.col</code>值的行,将为给定行索引返回<code>df1.col</code>中的值。如果<code>df2.col</code>值不是<code>df1.col</code>的成员,则将使用默认的<code>'NO_MATCH'</code>值。</p>