Reemplazar valores duplicados en columnas en Pandas

Tengo un marco de datos simple 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 ve así:

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

Solo quiero reemplazar los caracteres repetidos con el carácter '0', en las filas. Se reduce a mantener el primer valor duplicado que encontramos, de esta manera:

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

Esto parece tan simple pero estoy atascado. Cualquier empujón en la dirección correcta sería realmente apreciado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta