Вы можете использовать str.extract
с регулярным выражением r'(?P<price_value>.*?)(?P<price_unit>dollar.*)'
:
>>> import pandas as pd
>>> df = pd.DataFrame(data=['20dollar/m2/month', '1.8dollar/m2/day'], columns=['price'])
>>> df['price'].str.extract(r'(?P<price_value>.*?)(?P<price_unit>dollar.*)')
price_value price_unit
0 20 dollar/m2/month
1 1.8 dollar/m2/day
См. Демонстрационную версию регулярного выражения .
Подробности
(?P<price_value>.*?)
- группа "price_value": любые 0+ символов, кроме символов разрыва строки, как можно меньше (?P<price_unit>dollar.*)
- группа "price_unit": dollar
и любые0+ символов, отличных от символов разрыва строки, как можно больше.
Я предполагаю, что у вас нет разрывов строк на входе, но если они у вас есть, добавьте шаблон со строчкойМодификатор DOTALL, (?s)
: r'(?s)(?P<price_value>.*?)(?P<price_unit>dollar.*)'
Чтобы добавить вновь извлеченные столбцы в существующий фрейм данных, вы также можете использовать
df[['price_value', 'price_unit']] = df['price'].str.extract(r'(.*?)(dollar.*)')
Здесь именованные группы захвата не нужны, посколькуВы определяете имена столбцов заранее.