我有一个Pandas数据帧,我想在其中比较两列'text‘和'text_find’。
我想创建一个布尔标志'compare‘,如果'text_find’中的单词位于'text‘中,则将其设置为1,否则将'compare’设置为0。例如:
'text' = 'i hate cars'
'text_dins' = 'cars'
这将使'compare‘=1
'text' = 'i hate cars'
'text_dins' = 'rabbits'
这将使'compare‘=0
我该如何在pandas数据帧中完成这一切呢?
发布于 2017-07-23 22:25:51
我认为您需要使用带有axis=1
的apply
来按行处理,然后再与in
进行比较。最后,将True
s和False
s转换为new
列中的1,0
by astype
:
df = pd.DataFrame({'text':['i hate cars','i hate cars'], 'text_dins':['cars', 'rabbits']})
print (df)
text text_dins
0 i hate cars cars
1 i hate cars rabbits
df['new'] = df.apply(lambda x: x['text_dins'] in x['text'] , axis=1).astype(int)
print (df)
text text_dins new
0 i hate cars cars 1
1 i hate cars rabbits 0
如果没有NaN
,则使用列表理解的另一种解决方案:
df['new'] = [int(x[0] in x[1]) for x in zip(df['text_dins'], df['text'])]
print (df)
text text_dins new
0 i hate cars cars 1
1 i hate cars rabbits 0
https://stackoverflow.com/questions/45266118
复制相似问题