Вы можете использовать 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 репетитор ссылка на пример