Удалить подстроку из столбца на основе другого столбца - PullRequest
0 голосов
/ 26 февраля 2019

Попытка использовать значения (в виде строки) из одного столбца, чтобы определить, что удаляется из другого столбца.Остаток столбца должен быть неизменным.

Пример данных:

import pandas as pd

dfTest = pd.DataFrame({
    'date': ['190225', '190225', '190226'],
    'foo': ['190225-file1_190225', '190225-file2_190225', '190226-file3_190226']
})

dfTest

Результирующий кадр данных:

   |    date   |          foo
------------------------------------
0  |   190225  | 190225-file1_190225
1  |   190225  | 190225-file2_190225
2  |   190226  | 190226-file3_190226

Мне нужно создать столбец 'bar', где 'У foo 'все совпадения с' date 'удалены.

Я ищу вот что:

   |    date   |         foo          |   bar
-----------------------------------------------
0  |   190225  | 190225-file1_190225  | -file1_
1  |   190225  | 190225-file2_190225  | -file2_
2  |   190226  | 190226-file3_190226  | -file3_

Содержимое столбца' date ', отображаются ли они в начале, серединеили конец должен быть удален для каждой строки 'foo.'

Я пробовал несколько вещей, таких как приведенный ниже код, но он не работает.Он просто копирует исходный столбец, ничего не заменяя.Обратите внимание, что изменение regex = False не влияет на результаты.

dfTest['bar'] = dfTest['foo'].str.replace(str(dfTest['date']), '')

#or (removing .str, gives same result):

#dfTest['bar'] = dfTest['foo'].replace(str(dfTest['date']), '')

Оба результата приведены в таблице ниже (точно так же в 'bar'):

   |    date   |         foo          |         bar
-----------------------------------------------------------
0  |   190225  | 190225-file1_190225  | 190225-file1_190225  
1  |   190225  | 190225-file2_190225  | 190225-file2_190225  
2  |   190226  | 190226-file3_190226  | 190226-file3_190226  

Как удалитьсодержимое столбца даты, но в противном случае сохранить исходные данные?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Итак, я попробовал это, и это сработало довольно хорошо:

dfTest['bar'] = dfTest.apply(lambda row : row['foo'].replace(str(row['date']), ''), axis=1)
0 голосов
/ 26 февраля 2019

Отредактировано: я заметил, что с заменой на лямбду она не работает должным образом, поэтому я разделился на функцию.

def replace(str1, str2):
    return str1.replace(str2, '')


dfTest['bar'] = dfTest.apply(lambda row: replace(row['foo'], row['date']), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...