Python Pandas:检查一列中的字符串是否包含在同一行中另一列的字符串中

新手上路,请多包涵

我有一个这样的数据框:

 RecID| A  |B
----------------
1    |a   | abc
2    |b   | cba
3    |c   | bca
4    |d   | bac
5    |e   | abc

并且想要从 A 和 B 创建另一列 C,这样对于同一行,如果 A 列中的字符串包含在 B 列的字符串中,则 C = True,否则 C = False。

我正在寻找的示例输出是这样的:

 RecID| A  |B    |C
--------------------
1    |a   | abc |True
2    |b   | cba |True
3    |c   | bca |True
4    |d   | bac |False
5    |e   | abc |False

有没有办法在不使用循环的情况下快速在熊猫中执行此操作?谢谢

原文由 swang16 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您需要 applyin

 df['C'] = df.apply(lambda x: x.A in x.B, axis=1)
print (df)
   RecID  A    B      C
0      1  a  abc   True
1      2  b  cba   True
2      3  c  bca   True
3      4  d  bac  False
4      5  e  abc  False

另一个解决方案 list comprehension 更快,但必须没有 NaN s:

 df['C'] = [x[0] in x[1] for x in zip(df['A'], df['B'])]
print (df)
   RecID  A    B      C
0      1  a  abc   True
1      2  b  cba   True
2      3  c  bca   True
3      4  d  bac  False
4      5  e  abc  False

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

我无法得到@jezreal 提供的任何一个答案来处理第一列中的 None。对列表理解稍作改动就可以处理它:

 [x[0] in x[1] if x[0] is not None else False for x in zip(df['A'], df['B'])]

原文由 Doubledown 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏