Я думаю, что лучше всего сначала очистить данные, например:
# prepare data
df[['number', 'street']] = df.address.str.split('\s+', n=1, expand=True)
df['number'] = pd.to_numeric(df.number, errors='coerce')
Первая строка разбивает адрес на число и улицу, вторая преобразует число в действительное целое число,обратите внимание, что те значения, которые не являются целыми числами, будут преобразованы в NaN
. Тогда вы можете сделать:
# create mask to filter
mask = df.number.ge(300) & df.street.str.contains("Broadway")
print(df[mask])
По сути, создать логическую маску, где число больше или равно 300, а улица равна Бродвей. Собрав все вместе, вы получите:
# prepare data
df[['number', 'street']] = df.address.str.split('\s+', n=1, expand=True)
df['number'] = pd.to_numeric(df.number, errors='coerce')
# create mask to filter
mask = df.number.eq(300) & df.street.str.contains("Broadway")
print(df[mask])
Вывод
address number street
0 300 Broadway 300.0 Broadway
Обратите внимание, что это решение предполагает, что ваши данные имеют шаблон: Number Street
.