Python Pandas-检查另一个dataframe列中的系列值
我试图检查一个dataframe列中的字符串值是否包含在另一个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,以便:
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的问题似乎没有提到这样的情况。我同意这个答案,因为它是有效的,尽管使用了很多熊猫,但我从来没有咬过子弹去学习。申请吧。我现在就来。