Desglosar la columna de la lista en varias filas

Quiero expandir la lista en una determinada columna (en el ejemplo column_x) a varias filas.

Entonces

df = pd.DataFrame({'column_a': ['a_1', 'a_2'], 
                   'column_b': ['b_1', 'b_2'], 
                   'column_x': [['c_1', 'c_2'], ['d_1', 'd_2']]
                  })

será transformado de

    column_a    column_b    column_x
0   a_1         b_1         [c_1, c_2]
1   a_2         b_2         [d_1, d_2]

a

    column_a    column_b    column_x
0   a_1         b_1         c_1
1   a_1         b_1         c_2
2   a_2         b_2         d_1
3   a_2         b_2         d_2

El código que tengo hasta ahora hace exactamente esto, y lo hacerápido.

lens = [len(item) for item in df['column_x']]
pd.DataFrame( {"column_a" : np.repeat(df['column_a'].values, lens), 
               "column_b" : np.repeat(df['column_b'].values, lens), 
               "column_x" : np.concatenate(df['column_x'].values)})

Sin embargo, tengo muchas columnas. ¿Existe una solución ordenada y elegante para repetir todo el marco de datos sin especificar cada columna nuevamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta