Python 删除在数据帧的同一列中包含值的子字符串的行的最快方法

Python 删除在数据帧的同一列中包含值的子字符串的行的最快方法,python,pandas,dataframe,substring,Python,Pandas,Dataframe,Substring,我试图编写一些高效的代码,删除数据帧中的行,这些行在特定列中具有值,这些值是同一列中其他值(至少一个值的子集)的子字符串。 例如,在下面的输入数据框中考虑列 b>代码>: | | A | B | |---|----|------------| | 0 | 22 | ab | | 1 | 33 | abc | | 2 | 44 | abcd | | 3 | 55 | a | | 4 | 66 | john

我试图编写一些高效的代码,删除数据帧中的行,这些行在特定列中具有值,这些值是同一列中其他值(至少一个值的子集)的子字符串。 例如,在下面的输入数据框中考虑列<代码> b>代码>:

|   | A  | B          |
|---|----|------------|
| 0 | 22 | ab         |
| 1 | 33 | abc        |
| 2 | 44 | abcd       |
| 3 | 55 | a          |
| 4 | 66 | john       |
| 5 | 77 | john Doe   |
| 6 | 88 | jo         |
| 7 | 99 | john hi Doe|
|   | A  | B          |
|---|----|------------|
| 2 | 44 | abcd       |
| 5 | 77 | john Doe   |
| 7 | 99 | john hi Doe|
输出数据帧:

|   | A  | B          |
|---|----|------------|
| 0 | 22 | ab         |
| 1 | 33 | abc        |
| 2 | 44 | abcd       |
| 3 | 55 | a          |
| 4 | 66 | john       |
| 5 | 77 | john Doe   |
| 6 | 88 | jo         |
| 7 | 99 | john hi Doe|
|   | A  | B          |
|---|----|------------|
| 2 | 44 | abcd       |
| 5 | 77 | john Doe   |
| 7 | 99 | john hi Doe|

第0行、第1行和第3行已被删除,因为列
B
ab
abc
a
)的所有值都是该列中其他值的子字符串(即
abcd
)。第4行和第6行也是如此。

您可以使用一些列表压缩来检查行字符串是否位于数据帧的其他行中:

m = df['B'].apply(lambda x: any([x for y in df['B'] if x != y if x in y]))
df = df[~m]
df
Out[1]: 
    A            B
2  44         abcd
5  77     john Doe
7  99  john hi Doe

谢谢你,大卫。您的代码工作正常。如果没有更有效的答案,我将标记你的答案。我想知道是否有更快的方法获得同样的结果?