Given this setup:
import numpy as np
import pandas as pd
df = pd.DataFrame({
    'ID1': [1]*4+[2]*2, 'ID2':list('ABCDAB'), 
    'Conversion Rate': [0.046562, 0.315975, 0.577998, 0.059465, 0.6, 0.4]})
raw_df = pd.DataFrame({'ID1': [1,2], 'Value':[100, 200]})
you could define a function random_id2:
def random_id2(x):
    return np.random.choice(x['ID2'], p=x['Conversion Rate'].values)
and use groupby/apply:
id2 = df.groupby(['ID1']).apply(random_id2)
to obtain the Series
ID1
1    C
2    A
dtype: object
You could then build final_df by mapping raw_df['ID1'] values to id2 values:
final_df = raw_df.copy()
final_df['ID1'] = final_df['ID1'].map(id2)
final_df = final_df.rename(columns={'ID1': 'ID2'})
import numpy as np
import pandas as pd
df = pd.DataFrame({
    'ID1': [1]*4+[2]*2, 'ID2':list('ABCDAB'), 
    'Conversion Rate': [0.046562, 0.315975, 0.577998, 0.059465, 0.6, 0.4]})
raw_df = pd.DataFrame({'ID1': [1,2], 'Value':[100, 200]})
def random_id2(x):
    return np.random.choice(x['ID2'], p=x['Conversion Rate'].values)
id2 = df.groupby(['ID1']).apply(random_id2)
final_df = raw_df.copy()
final_df['ID1'] = final_df['ID1'].map(id2)
final_df = final_df.rename(columns={'ID1': 'ID2'})
print(final_df)
yields
  ID2  Value
0   C    100
1   A    200