Как фильтровать элементы, содержащие только определенные повторяющиеся символы в кадре данных - PullRequest
0 голосов
/ 23 мая 2019

Я хочу создать новый фрейм данных, который отфильтровывает избыточную информацию из предыдущего фрейма данных.Исходный фрейм данных создается путем просмотра множества папок с файлами и предоставления столбца элементов, каждый из которых содержит строку полного пути для доступа к каждому файлу.Каждый файл назван в соответствии с пробным номером и оценкой в ​​соответствующей тестовой папке.Мне нужно удалить все повторения оценок, которые равны 100 для каждого испытания, однако первый счет 100 для каждого испытания должен остаться.

С Python Pandas мне известно об использовании df [df [col_header].str.contains ('text')] для специальной фильтрации того, что необходимо, и использования '~' в качестве логического значения NOT.

Нефильтрованный столбец данных с избыточными значениями выглядит следующим образом

\\desktop\Test_Scores\test1\trial1-98
\\desktop\Test_Scores\test1\trial2-100
\\desktop\Test_Scores\test1\trial3-100       #<- must remove
\\desktop\Test_Scores\test2\trial1-95
\\desktop\Test_Scores\test2\trial2-100
\\desktop\Test_Scores\test2\trial3-100       #<- must remove
\\desktop\Test_Scores\test2\trial3-100       #<- must remove
.
.
.
n

Ожидаемый результат после использования некоторого кода в качестве фильтра - это кадр данных, который выглядит следующим образом

\\desktop\Test_Scores\test1\trial1-98
\\desktop\Test_Scores\test1\trial2-100
\\desktop\Test_Scores\test2\trial1-95
\\desktop\Test_Scores\test2\trial2-100
.
.
.
.
n

1 Ответ

1 голос
/ 23 мая 2019

Эта строка должна решить вашу проблему.

df = df.loc[df["col"].shift().str.contains("-100") != df["col"].str.contains("-100")]

Обновление:

df["col"] = df["col"].str.replace('\t','\\t')
df['test_number'] = df.col.str.split('-').str[0].str.split('\\').str[-2]
df['score'] = df.col.str.split('-').str[1]
df.drop_duplicates(["test_number","score"], inplace = True)
df.drop(["test_number","score"],1,inplace = True)

Проверьте это решение. Причина, по которой я делаю замену в самой первой строке, состоит в том, что ваши данные содержат \t, который в программировании является разделителем табуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...