检查 Pandas 列是否包含来自另一列的值

Chr*_*ong 8 python pandas

如果df['col']='a','b','c'df2['col']='a123','b456','d789'我如何创建df2['is_contained']='a','b','no_match',如果从值,其中df['col']来自值范围内被发现df2['col']df['col']返回值,如果没有发现匹配,“NO_MATCH”返回?此外,我不希望有多个匹配项,但在不太可能的情况下,我想返回一个像“多个匹配项”这样的字符串。

her*_*ara 5

有了这个玩具数据集,我们想添加一个新列,df2其中将包含no_match前三行,最后一行将包含值,'d'因为该行的col值(字母'a')出现在 df1 中。

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']})
Run Code Online (Sandbox Code Playgroud)

换句话说,从值df1应采用填充这个新列df2只有当行的df2['col']值出现在某处df1['col']

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
Run Code Online (Sandbox Code Playgroud)

如果这是理解您的问题的正确方法,那么您可以使用 pandas 执行此操作isin

In [4]: df2.col.isin(df1.col)
Out[4]:
0    False
1    False
2    False
3     True
Name: col, dtype: bool
Run Code Online (Sandbox Code Playgroud)

True仅当 in 中的值df2.col也在 in时才计算为df1.col

然后,如果您完全熟悉 R,则可以使用与 R 中np.where大致相同的 which ifelse

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
Run Code Online (Sandbox Code Playgroud)

对于df2.col出现在df1.col中的值的行,df1.col将为给定的行索引返回值 from 。如果该df2.col值不是 的成员df1.col'NO_MATCH'则将使用默认值。

  • 你的输出并不能解决问题。他想要对两列进行行方式比较。 (2认同)