Используйте groupby
и nunique
и проверьте, равен ли результат 1:
df.groupby([df.datetime.dt.date, 'rating']).signal.nunique().eq(1)
datetime rating
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
Name: signal, dtype: bool
Или, аналогично, используйте apply
с set
преобразованием:
(df.groupby([df.datetime.dt.date, 'rating']).signal
.apply(lambda x: len(set(x)) == 1))
datetime rating
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
Name: signal, dtype: bool
PS. Вам не нужно присваивать временный столбец, groupby
принимает произвольные аргументы группировщика.