Python熊猫。删除值包含在同一列中另一个单元格中的单元格

时间:2018-09-14 01:13:03

标签: python pandas duplicates apply

我有一个这样的数据框:

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)

2 个答案:

答案 0 :(得分:3)

这是不平凡的。但是我们可以利用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

答案 1 :(得分:1)

就像我的解决方案也是O(m * n)一样感冒(在您的情况下,m = n)

df[np.sum(np.array([[y in x for x in df.A.values] for y in df.A.values]),1)==1]
Out[30]: 
         A  B
1  example  6
3    hello  4