Вы можете использовать df.shift () для этого, чтобы посмотреть значение из строки вверх или вниз (или нескольких строк, указанных числом x в .shift (x)).
Вы можете использовать это в сочетании с .loc для выбора всех строк, которые имеют значение, идентичное значению 2 строк выше, а затем заменить его на 0.
Что-то вроде этого должно работать: (изменил код, чтобы сделать его гибким для бесконечного количества столбцов и гибким для количества дней)
numberOfDays = 3 # number of days to compare
for col in df.columns:
for x in range(1, numberOfDays):
df.loc[df[col] == df[col].shift(x), col] = 0
print df
Это дает мне вывод:
A B C
date
01-01-2011 2 10 0
01-02-2011 0 12 2
01-03-2011 0 0 0
01-04-2011 3 11 3
01-05-2011 5 15 0
01-06-2011 0 23 1
01-07-2011 4 21 4
01-08-2011 2 0 5
01-09-2011 1 11 0