首页 > 解决方案 > 删除包含熊猫数据框同一列中值子字符串的行的最快方法

问题描述

我正在尝试编写一些有效的代码来删除 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 行已被删除,因为它们的列Bababca)的所有值都是该列中其他值的子字符串(即abcd)。第 4 行和第 6 行也是如此。

标签: pythonpandasdataframesubstring

解决方案


您可以使用一些列表综合来检查行字符串是否在数据框的其他行中:

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

推荐阅读