Ответ 1
Вы можете использовать метод Series str.startswith
(который принимает регулярное выражение):
In [11]: s = pd.Series(['aa', 'ab', 'ca', np.nan])
In [12]: s.str.startswith('a', na=False)
Out[12]:
0 True
1 True
2 False
3 False
dtype: bool
Вы также можете сделать то же самое с str.contains
(с использованием регулярного выражения):
In [13]: s.str.contains('^a', na=False)
Out[13]:
0 True
1 True
2 False
3 False
dtype: bool
Итак, вы можете сделать df[col].str.startswith
...
См. также раздел сравнения SQL в документах.
Примечание: (как указано OP) по умолчанию NaNs будут распространяться (и, следовательно, вызывать ошибку индексирования, если вы хотите использовать результат в виде булевой маски), мы используем этот флаг, чтобы сказать, что NaN должен отображаться в False.
In [14]: s.str.startswith('a') # can't use as boolean mask
Out[14]:
0 True
1 True
2 False
3 NaN
dtype: object