Как удалить значение строки столбца из значения строки другого столбца? - PullRequest
0 голосов
/ 29 декабря 2018

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

df:
col1                      col2
blue water bottle        blue
red wine glass           red
green cup                green 

Я хочу создать еще один столбец, который будет игнорировать значение col2 из col1, например, новый столбец col3 будет:

water bottle
wine glass
green cup

Я пробовал этот код:

df.apply(lambda x: x['col1'].replace(x['col2'], ''), axis=1)

Но я получаю следующую ошибку:

AttributeError: ("У объекта" NoneType "нет атрибута" заменить "'",' произошло с индексом 0 ')

Как это сделать?

Ответы [ 4 ]

0 голосов
/ 29 декабря 2018

Сбросьте строки с NaN записями, прежде чем применять вашу лямбду: df[['col1', 'col2']].dropna().apply(lambda x: x['col1'].replace(x['col2'], ''), axis=1)

0 голосов
/ 29 декабря 2018

Это один способ (векторизация даст лучший ответ, конечно)

import pandas as pd

df = pd.DataFrame()
df['col'] = ['blue water bottle', 'red wine glass', 'green cup']
df['col2'] = ['blue', 'red', 'green']
df['col3'] = ['', '', '']
for idx, row in df.iterrows():
    row['col3'] = row['col'].replace(row['col2'], '').strip()

pandas string replace

0 голосов
/ 29 декабря 2018

Причина в том, что для некоторых строк в вашем фрейме данных "col1" - None.Вам нужно будет обработать эти случаи, например, присвоив пустую строку col3

df["col3"] = df.apply(
    lambda x: "" if pd.isnull(x["col1"]) else x["col1"].replace(x["col2"], ""),
    axis=1
)
0 голосов
/ 29 декабря 2018

Использование -

df[['col','col2']].apply(lambda x: x[0].replace(x[1],''), axis=1)

Выход

0     water bottle
1       wine glass
2              cup
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...