Substituir valores duplicados nas colunas do Pandas

Eu tenho um quadro de dados simples, como tal:

df = [    {'col1' : 'A', 'col2': 'B', 'col3':   'C', 'col4':'0'},
          {'col1' : 'M', 'col2':   '0', 'col3': 'M', 'col4':'0'},
          {'col1' : 'B', 'col2':  'B', 'col3':  '0', 'col4':'B'},
          {'col1' : 'X', 'col2':  '0', 'col3':  'Y', 'col4':'0'}
          ]
df = pd.DataFrame(df)
df = df[['col1', 'col2', 'col3', 'col4']]
df  

Que se parece com isso:

| col1 | col2 | col3 | col4 |
|------|------|------|------|
| A    | B    | C    | 0    |
| M    | 0    | M    | 0    |
| B    | B    | 0    | B    |
| X    | 0    | Y    | 0    |

Eu só quero substituir caracteres repetidos pelo caractere '0', nas linhas. Tudo se resume a manter o primeiro valor duplicado que encontramos, assim:

| col1 | col2 | col3 | col4 |
|------|------|------|------|
| A    | B    | C    | 0    |
| M    | 0    | 0    | 0    |
| B    | 0    | 0    | 0    |
| X    | 0    | Y    | 0    |

Parece tão simples, mas estou preso. Qualquer cutucada na direção certa seria realmente apreciada.

questionAnswers(1)

yourAnswerToTheQuestion