检查Pandas列是否包含来自其他列的值

2024-09-30 08:36:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如果df['col']='a','b','c'df2['col']='a123','b456','d789'我如何创建df2['is_contained']='a','b','no_match',如果df['col']中的值在df2['col']中找到,则返回df['col']值,如果找不到匹配,则返回“不匹配”?我也不希望有多个匹配,但在不太可能的情况下,我希望返回一个类似“多个匹配”的字符串。


Tags: no字符串dfismatch情况coldf2
2条回答

有了这个玩具数据集,我们想在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']})

换句话说,只有当行的df2['col']值出现在df1['col']的某个位置时,df1中的值才应该用于在df2中填充此新列。

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

如果这是理解您的问题的正确方法,那么您可以使用pandasisin

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

只有当df2.col中的值也在df1.col中时,此值才计算为True

然后,如果您完全熟悉R,那么可以使用np.where,这或多或少与R中的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

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

在0.13中,可以使用^{}

In [11]: df1 = pd.DataFrame({'col': ['a', 'b', 'c']})

In [12]: df2 = pd.DataFrame({'col': ['d23','b456','a789']})

In [13]: df2.col.str.extract('(%s)' % '|'.join(df1.col))
Out[13]: 
0    NaN
1      b
2      a
Name: col, dtype: object

相关问题 更多 >

    热门问题