Tried slightly different approach. Created a function which will return numbers in pairs from the initial comma separated string.
def pairup(mystring):
    """Function to return paired up list from string"""
    mylist = mystring.split(',')
    if len(mylist) == 1: return [mylist]
    splitlist = []
    for index, item in enumerate(mylist):
        try:
            splitlist.append([mylist[index], mylist[index+1]])
        except:
            pass
    return splitlist
Now let's create the new data frame.
# https://stackoverflow.com/a/39955283/3679377
new_df = df[['ID']].join(
    df.Values.apply(lambda x: pd.Series(pairup(x)))
      .stack()
      .apply(lambda x: pd.Series(x))
      .fillna("")
      .reset_index(level=1, drop=True), 
    how='left').reset_index(drop=True)
new_df.columns = ['ID', 'Col 1', 'Col 2']
Here's the output of print(new_df).
   ID Col 1 Col 2
0   1    10    11
1   1    11    12
2   1    12    13
3   2    14      
4   3    15    16
5   3    16    17
6   3    17    18