Питон Панды.Удалить ячейки, значение которых содержится в другой ячейке в том же столбце - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть такой кадр данных:

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 голосов
/ 14 сентября 2018

Как и при простуде, при условии, что мое решение также равно 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
0 голосов
/ 14 сентября 2018

Это нетривиально.Но мы можем воспользоваться 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...