Разделить на новую строку и "un-nest":
from itertools import chain
v = df.pop('column2').str.split('\n') # if this doesn't work, try r'\\n'.
df = (pd.DataFrame(df.values.repeat(v.str.len(),axis=0), columns=df.columns)
.assign(column2=list(chain.from_iterable(v)))
.sort_index(axis=1))
print(df)
column1 column2 column3
0 1 Hi hello
1 2 some hi
2 2 Test hi
3 2 To hi
4 2 Work hi
5 3 Hiya somewhere