首页 > 解决方案 > 蟒蛇熊猫。删除值包含在同一列的另一个单元格中的单元格

问题描述

我有一个这样的数据框:

A           B
exa         3
example     6
exam        4
hello       4
hell        3

我想删除作为另一行子字符串的行并保留最长的行(注意 B 已经是 A 的长度)

我希望我的桌子看起来像这样:

A           B
example     6
hello       4

我考虑过以下布尔过滤器,但它不起作用:(

df['Check'] = df.apply(lambda row: df.count(row['A'] in row['A'])>1, axis=1)

标签: pythonpandasduplicatesapply

解决方案


这是不平凡的。但是我们可以利用对B数据进行排序,将每个值与仅比自身大的字符串进行比较,以获得略优于 O(N^2) 的解决方案。

df = df.sort_values('B')
v = df['A'].tolist()

df[[not any(b.startswith(a) for b in v[i + 1:]) for i, a in enumerate(v)]].sort_index()

         A  B
1  example  6
3    hello  4

推荐阅读