Вот идиоматический, но медленный способ сделать это:
df.col1 = df.col1.str.split('-', 1).str[1] # discard first part
parts = df.col1.str.rsplit('-', 1).str
df.col1 = parts[0]
df['col2'] = parts[1]
Хотя это работает, это не быстро: около 4 секунд для 700 тыс. Строк.Глядя на это, можно подумать, что это хороший способ сделать это, но с точки зрения производительности это хуже, чем все альтернативы.