Чтобы установить в первой строке каждого дня ноль, вы можете сгруппировать по столбцу даты, но извлечь фактическое значение даты, а затем агрегировать в «первую» строку. Создайте серию из этого для столбца 'id'. (Я предполагаю, что они являются уникальными значениями.)
id_filt = df.groupby(df.date.dt.date).first()['id']
Затем используйте lo c, чтобы вернуть только строки со значениями 'id', затем установите столбцы равными нулю.
df.loc[df["id"].isin(id_filt.values), ["TIME_IN_SEC_SHIFT", "TIME_DIFF"]] = 0
date id TIME_IN_SEC TIME_IN_SEC_SHIFT TIME_DIFF
0 2019-01-01 00:02:48.714 1 1.546301e+09 0.000000e+00 0.0
1 2019-01-01 00:02:58.714 2 1.546301e+09 1.546301e+09 10.0
2 2019-01-02 00:02:48.714 3 1.546387e+09 0.000000e+00 0.0
3 2019-01-02 00:04:48.714 4 1.546387e+09 1.546387e+09 120.0
Конечно, вы можете объединить их вместе, чтобы получить:
df.loc[
df["id"].isin(df.groupby(df.date.dt.date).first()["id"].values),
["TIME_IN_SEC_SHIFT", "TIME_DIFF"],
] = 0