I don't know if you literally want a blank string or NaN
but I'm using NaN
here, you can test if a column has duplicated values using duplicated and set these to your desired result, by the way you need to add an explanation of what your desired result means rather us guess:
In [128]:
df.loc[df['c1'].duplicated(), 'c1'] = np.NaN
df
Out[128]:
c1 c2
0 3 10
1 NaN 30
2 1 20
3 2 15
4 NaN 100
The blank string version:
In [131]:
df.loc[df['c1'].duplicated(), 'c1'] = ''
df
Out[131]:
c1 c2
0 3 10
1 30
2 1 20
3 2 15
4 100
EDIT
You updated your question so I've updated my answer:
In [143]:
df.loc[(df['a'].duplicated() & df['c1'].duplicated()), ['a','c1']] = ''
df
Out[143]:
a c1 c2
0 Male 3 10
1 30
2 Male 1 20
3 Female 2 15
4 100