Как поставить символ в значении столбца на нулевую позицию значения при выполнении определенного условия?

У меня есть DataFrame

d = {"city":['Лондон', 'Краков', 'Дамаск'], "year": ['50 н. е.','990', '2500 год до н. э.']}
df = pd.DataFrame(d, index=[1, 2, 3])
city year
1 Лондон 50 н. е.
2 Краков 990
3 Дамаск 2500 год до н. э

Нужно заменить 'до н. э' на '-' и поставить его на нулевую позицию значения, а все остальные не числовые символы удалить.

То есть ожидаю получить:

city year
1 Лондон 50
2 Краков 990
3 Дамаск -2500

Знаю как удалить ненужные символы, но как поставить символ в начало, не понимаю.

re_express = re.compile('до н. э.')
df['year'] = df['year'].replace(re_express, '-')
re_express = re.compile('[а-яА-ЯёЁA-Za-z.]|\s')
df['year'] = df['year'].replace(re_express, '')
city year
1 Лондон 50
2 Краков 990
3 Дамаск 2500-

Ответы (1 шт):

Автор решения: MaxU

Попробуйте так:

res = (pd.to_numeric(df["year"].str.extract(r".*?(\d+).*")[0], errors="coerce")
       * np.where(df["year"].str.contains(r"до н. э."), -1, 1))

результат

In [49]: res
Out[49]:
1      50
2     990
3   -2500
Name: 0, dtype: int64
→ Ссылка