检查一列中的字符串是否包含在同一行中另一列的字符串中
- 2025-02-27 09:05:00
- admin 原创
- 107
问题描述:
我有一个像这样的数据框:
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
有没有办法在 pandas 中快速完成此操作而不使用循环?
解决方案 1:
你apply
需要in
:
df['C'] = df.apply(lambda row: row.A in row.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
另一个使用列表理解的解决方案更快,但不能有NaN
s:
df['C'] = [row[0] in row[1] for row 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
解决方案 2:
如果您正在将字符串与字符串进行比较并获取类型错误,则可以像这样编写代码:
df['C'] = df.apply(lambda x: str(x.A) in str(x.B), axis=1)
解决方案 3:
我无法得到 @jezreal 提供的答案来处理第一列中的 None。对列表理解进行轻微修改即可处理它:
[a in b if a is not None else False for a,b in zip(df['A'], df['B'])]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD