Используйте вместо :
In [10]: df.b.str.contains('^f')
Out[10]:
0 False
1 True
2 True
3 False
Name: b, dtype: bool
Одно решение с использованием groupby
:
def zipper(row):
return list(zip(row['longitude'], row['latitude']))
res = df.dropna(subset=['longitude', 'latitude'])\
.groupby('interview').apply(zipper).to_dict()
# {'A1': [(34.2, 90.2), (54.2, 23.5)],
# 'A2': [(23.1, 38.2), (-23.7, -98.4)]}
Другое с использованием collections.defaultdict
:
from collections import defaultdict
res = defaultdict(list)
for row in df.dropna(subset=['longitude', 'latitude']).itertuples(index=False):
res[row.interview].append((row.longitude, row.latitude))
С defaultdict
является подклассом dict
, как правило, никаких дальнейших манипуляций не требуется.