我有这样的数据帧:
RecID| A |B
----------------
1 |a | abc
2 |b | cba
3 |c | bca
4 |d | bac
5 |e | abc
Run Code Online (Sandbox Code Playgroud)
并且想要在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
Run Code Online (Sandbox Code Playgroud)
有没有办法在熊猫中快速完成此操作而不使用循环?谢谢
jez*_*ael 27
你需要apply有in:
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
Run Code Online (Sandbox Code Playgroud)
另一个解决方案list comprehension是更快,但必须没有NaNs:
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
Run Code Online (Sandbox Code Playgroud)
如果您将字符串与字符串进行比较并收到类型错误,您可以这样编写代码:
df['C'] = df.apply(lambda x: str(x.A) in str(x.B), axis=1)
Run Code Online (Sandbox Code Playgroud)
我无法得到 @jezreal 提供的任何一个答案来处理第一列中的 None 。对列表理解稍加修改就可以处理它:
[a in b if a is not None else False for a,b in zip(df['A'], df['B'])]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8052 次 |
| 最近记录: |