pandas divide row value by aggregated sum with a condition set by other cell
try this:
In [79]: df.assign(ID_new=df.ID/df.groupby('Source').ID.transform('sum'))
Out[79]:
Source ID ID_new
0 1 2 0.222222
1 2 3 1.000000
2 1 2 0.222222
3 1 2 0.222222
4 1 3 0.333333
5 3 1 1.000000
if you need it as a new persistent column you can do it as @jezrael proposed in the comment:
In [81]: df['ID_new'] = df.ID/df.groupby('Source').ID.transform('sum')
In [82]: df
Out[82]:
Source ID ID_new
0 1 2 0.222222
1 2 3 1.000000
2 1 2 0.222222
3 1 2 0.222222
4 1 3 0.333333
5 3 1 1.000000