Один из способов без groupby
или lambda
- использовать pd.DataFrame.loc
:
import pandas as pd
df = pd.DataFrame({'ind': [1, 1, 1, 2, 2, 3, 3],
'val': ['Hat', 'Cat', 'Cat', 'Dog', 'Log', 'Hat', 'Hat']})
idx = set(df.loc[df['val'].str.contains('Hat', regex=False), 'ind'])
df.loc[df['ind'].isin(idx), 'val'] = 'Hat'
ind val
0 1 Hat
1 1 Hat
2 1 Hat
3 2 Dog
4 2 Log
5 3 Hat
6 3 Hat