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



我正在尝试编写一些高效的代码,删除pandas数据帧中特定列中具有值的行,这些行是同一列中其他值(至少一个值的子集(的子字符串。例如,考虑以下输入数据帧中的列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|

行0、1和3已被移除,因为它们对于列B(ababca(的所有值都是该列中其他值(即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

最新更新