Python - Создать новый столбец DF путем копирования - частичное совпадение строки из существующих значений столбца - PullRequest
1 голос
/ 29 апреля 2020

У меня есть фрейм данных с записями 50 тыс. С одним из значений столбца, как показано ниже.

DF \ n

Index.       COLUMN\n

0.       ABC-1M-Deliveryorder
1.       KGF-ORDERDelivery-2Y
2.       DEFGHIABC1M-OPEN
3.       KGFABC
4.       ABC-3Y-ORDER

Я ищу ключевые слова - 3Y, 3M, 2Y и 1Y из COLUMN и, если найдено, значения необходимо скопировать в новое имя столбца DF TENOR с помощью 3Y, 3M, 1M et c. В случае, если он не найден, он может показать FALSE или NAN

Я пробовал с кодом ниже

df['Tenor'] = ""\n

df['Tenor'] = df.column.apply(lambda x: x in ['3Y','3M,'1Y','1M']

Возвращается как FALSE во всех строках для нового столбца. Можете ли вы посоветовать, как лучше всего удовлетворить мои требования?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете использовать pandas .Series.str.contains с регулярным выражением:

import pandas as pd

df = pd.DataFrame(dict(
    COLUMN = [
        'ABC-1M-Deliveryorder','KGF-ORDERDelivery-2Y',
        'DEFGHIABC1M-OPEN', 'KGFABC', 'ABC-3Y-ORDER'
    ]
))

df['Tenor'] = df['COLUMN'].str.contains('3Y|3M|2Y|1Y|1M', regex=True)

Редактировать: OP задал следующий вопрос:

Приведенный выше фрагмент кода возвращает значение ИСТИНА, где столбец находит строку 2Y, 3Y и c. Но мне нужен вывод, как показано ниже. Столбец индекса NEW 0 AB C -1M-Deliveryorder 1M 1 KGF-ORDERDelivery-2Y 2Y 2 DEFGHIABC1M-OPEN 1M 3 KGFAB C Nan 4 AB C -3Y-ORDER 3Y

В этом случае вы можете использовать пользовательскую функцию и pandas.Series.apply как итак:

import pandas as pd

df = pd.DataFrame(dict(
    COLUMN = [
        'ABC-1M-Deliveryorder','KGF-ORDERDelivery-2Y',
        'DEFGHIABC1M-OPEN', 'KGFABC', 'ABC-3Y-ORDER'
    ]
))

def find_substring(x):
    for y in ('3Y','3M','2Y','1Y','1M'):
        if y in x:
            return y

df['Tenor'] = df['COLUMN'].apply(find_substring)

print(df)

вывод:

                 COLUMN Tenor
0  ABC-1M-Deliveryorder    1M
1  KGF-ORDERDelivery-2Y    2Y
2      DEFGHIABC1M-OPEN    1M
3                KGFABC  None
4          ABC-3Y-ORDER    3Y

python репетитор ссылка на пример

0 голосов
/ 30 апреля 2020

Приведенный выше фрагмент кода возвращает TRUE, где столбец находит строку 2Y, 3Y et c ..

Но мне нужен вывод, как показано ниже:

'' ''

Индексная колонка NEW 0 AB C -1M-заказ доставки 1M 1 KGF-ЗАКАЗДоставка-2Y 2Y 2 DEFGHIABC1M-OPEN 1M 3 KGFAB C Нан 4 AB C -3Y-ЗАКАЗ 3Y

'' ''

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