如何使用Python DataFrame检查列A的内容是否包含在列B中?
熊猫数据框中有两列:如何使用Python DataFrame检查列A的内容是否包含在列B中?,python,pandas,dataframe,Python,Pandas,Dataframe,熊猫数据框中有两列:authors和name。我想创建第三列:如果相应行的名称包含在相应行的作者中,则单元格的值为真,否则为假 因此,结果将如下图所示 我试过.str.contains(),.str.extract(),.str.find(),.where(),等等。 但是Python返回一个错误:“Series”对象是可变的,因此不能对它们进行散列。 有人知道如何在Python中创建第三列吗?IIUC然后可以按lambda行检查名称字符串是否存在于Authors中: df['Check']
authors
和name
。我想创建第三列:如果相应行的名称
包含在相应行的作者
中,则单元格的值为真
,否则为假
因此,结果将如下图所示
我试过.str.contains()
,.str.extract()
,.str.find()
,.where()
,等等。
但是Python返回一个错误:“Series”对象是可变的,因此不能对它们进行散列。
有人知道如何在Python中创建第三列吗?IIUC然后可以按lambda行检查名称字符串是否存在于Authors中:
df['Check'] = df.apply(lambda row: row['Name'] in row['Authors'], axis=1)
应该有用
您不能在此处使用
str.contains()
,str.extract()
,str.find()
,或where()
,因为您试图按行比较,而这些方法需要一个固定的搜索条件列表或模式。这是一个矢量化解决方案,它使用以下方法:
演示:
是的,你是对的,你的建议解决了我的问题。非常感谢你@苏珊如果回答了这个问题,请考虑点击选中的标记/滴答到左边的答案,把它变成绿色。这标志着问题已解决,您感到满意,并奖励您和回答者。@MattDMo,非常感谢您的建议。这是我第一次在stackoverflow上发帖,我不太熟悉如何使用它。谢谢提醒@EdChum Hi Ed,我刚刚发现以下方法也有效,我只想与您分享:):df['Check']=map((lambda x,y:x in y),df['Name'],df['Authors']),在Python 2中是的,这会起作用。它可能会更快,因为map是作为cython for循环实现的
df['Check'] = df.Authors.str.split(r'\s*,\s*', expand=True).isin(df.Name).any(1)
In [126]: df
Out[126]:
Authors Name
0 S.Rogers, T. Williams H. Tov
1 M. White, J.Black J.Black
In [127]: df.Authors.str.split(r'\s*,\s*', expand=True)
Out[127]:
0 1
0 S.Rogers T. Williams
1 M. White J.Black
In [128]: df.Authors.str.split(r'\s*,\s*', expand=True).isin(df.Name)
Out[128]:
0 1
0 False False
1 False True
In [130]: df['Check'] = df.Authors.str.split(r'\s*,\s*', expand=True).isin(df.Name).any(1)
In [131]: df
Out[131]:
Authors Name Check
0 S.Rogers, T. Williams H. Tov False
1 M. White, J.Black J.Black True