Python Pandas-检查另一个dataframe列中的系列值

Python Pandas-检查另一个dataframe列中的系列值,python,pandas,Python,Pandas,我试图检查一个dataframe列中的字符串值是否包含在另一个dataframe列中。我的数据帧是: d = {'col1': ['Live', 'Live','Live','Deferrred'], 'col2': ['Live', 'Not live,Deferred', 'Deferred,Live','Not live']} df = pd.DataFrame(data=d) print(df) 如果Col1中的值是Col2中的一个分离值,则新列“Check”应显示True,以便:

我试图检查一个dataframe列中的字符串值是否包含在另一个dataframe列中。我的数据帧是:

d = {'col1': ['Live', 'Live','Live','Deferrred'], 'col2': ['Live', 'Not live,Deferred', 'Deferred,Live','Not live']}
df = pd.DataFrame(data=d)
print(df)
如果Col1中的值是Col2中的一个分离值,则新列“Check”应显示True,以便:

        col1               col2 Check
0       Live               Live     Y
1       Live  Not live,Deferred     N
2       Live      Deferred,Live     Y
3  Deferrred           Not live     N
我试过:

conditions = [df['col1'].isin(df['col2'])]
choices = [('Y')]
df['Check'] = np.select(conditions, choices, default = 'N')
但是,对于
Live in Not Live
,它将返回
True
,而应该返回
False

我也尝试过:

conditions = [df['col2'].contains(df['col1'])]
然而,这一结果表明:
AttributeError:'Series'对象没有属性'contains'


有没有一种方法可以使
.isin()
区分大小写,或者有没有另一种方法可以使
Live in Not Live
返回
False

您可以这样做:

df['Check'] = (df
              .apply(lambda x: 'Y' if x['col1'] in x['col2'] else 'N', 1))

以下是一种方法:

df['Check'] = (df
              .apply(lambda x: 'Y' if x['col1'] in x['col2'] else 'N', 1))

使用
numpy

将numpy导入为np
df['Check']=np.按位_和(df['col2'].str.split(“,”).map(set),df['col1'].str.split().map(set)).ne(set())
输出:

col1 col2检查
0实时真实
活着不是活着,是虚假的
2实时延迟,实时真实
3.延期不住假

使用
numpy

将numpy导入为np
df['Check']=np.按位_和(df['col2'].str.split(“,”).map(set),df['col1'].str.split().map(set)).ne(set())
输出:

col1 col2检查
0实时真实
活着不是活着,是虚假的
2实时延迟,实时真实
3.延期不住假

使用该lambda,我认为您可以将其修改为
lambda x:'Y'如果x['col1']中的x['col2']否则的'N'
并取消替换调用。可能的边缘情况是,Live是col2中某个短语的子字符串,如col1='Live'和col2='Not Live,Deferred'。如果x['col2']中的x['col1'],则更安全的是
lambda x:'Y'。拆分(',')否则'N'
,但OP没有证明这是一个可能的枚举,因此它可能是没有意义的。这暂时有效,但将
不活动
替换为
不活动
,您将看到这也会给出错误的结果,但是OP的问题似乎没有提到这样的情况。我同意这个答案,因为它是有效的,尽管使用了很多熊猫,但我从来没有咬过子弹去学习。申请吧。现在我会的。有了这个lambda,我想你可以修改它为
lambda x:'Y'如果x['col1']中的x['col2']或者'N'
,并且去掉替换的调用。可能的边缘情况是Live是col2中某个短语的子字符串,比如col1='Live'和col2='Not Live,Deferred'。如果x['col2']中的x['col1'],则更安全的是
lambda x:'Y'。拆分(',')否则'N'
,但OP没有证明这是一个可能的枚举,因此它可能是没有意义的。这暂时有效,但将
不活动
替换为
不活动
,您将看到这也会给出错误的结果,但是OP的问题似乎没有提到这样的情况。我同意这个答案,因为它是有效的,尽管使用了很多熊猫,但我从来没有咬过子弹去学习。申请吧。我现在就来。