You need mask with assign:
m1 = df.D2 > df.I2
m2 = df.D3 > df.I3
df = df.mask(m1, df.assign(I3=df.I2+df.I3, D3=df.D2+df.D3, I2=0, D2=0))
df = df.mask(m2, df.assign(I2=df.I2+df.I3, D2=df.D2+df.D3, I3=0, D3=0))
print (df)
Date Factory I1 D1 I2 D2 I3 D3
0 1701 West 0 0 0 0 10 0
1 1701 East 39 0 86 30 0 0
2 1701 West 0 0 0 0 15 10
If there are columns with spaces:
m1 = df.D2 > df.I2
m2 = df.D3 > df.I3
def f1(x):
df['I3']=df.I2+df.I3
df['D3']=df.D2+df.D3
df['I2'] = df['D2'] = 0
return df
def f2(x):
df['I2']=df.I2+df.I3
df['D2']=df.D2+df.D3
df['I3'] = df['D3'] = 0
return df
df = df.mask(m1, f1)
df = df.mask(m2, f2)
print (df)
Date Factory I1 D1 I2 D2 I3 D3
0 1701 West 0 0 10 0 0 0
1 1701 East 39 0 86 30 0 0
2 1701 West 0 0 15 10 0 0
Or if want use assign (I3 was changed to I 3):
m1 = df['D2'] > df['I2']
m2 = df['D3'] > df['I 3']
d1 = {'I 3': lambda x: x['I2'] + x['I 3'],'D3':lambda x: x['D2']+x['D3'],'I2':0,'D2':0}
d2 = {'I2': lambda x: x['I2'] + x['I 3'],'D2':lambda x: x['D2']+x['D3'],'I3':0,'D3':0}
df = df.mask(m1, df.assign(**d1))
df = df.mask(m2, df.assign(**d2))
print (df)
Date Factory I1 D1 I2 D2 I 3 D3
0 1701 West 0 0 0 0 10 0
1 1701 East 39 0 86 30 3 0
2 1701 West 0 0 0 0 15 10