我正在尝试编写一些高效的代码,删除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
(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