Pandas DataFrame: normaliza una columna JSON y combina con otras columnas

Tengo un DataFrame de pandas que contiene una columna con varios elementos de datos JSON como lista de dictados. Quiero normalizar la columna JSON y duplicar las columnas que no son JSON:

# creating dataframe df_actions = pd.DataFrame(columns=['id', 'actions']) rows = [[12,json.loads('[{"type": "a","value": "17"},{"type": "b","value": "19"}]')], [15, json.loads('[{"type": "a","value": "1"},{"type": "b","value": "3"},{"type": "c","value": "5"}]')]] df_actions.loc[0] = rows[0] df_actions.loc[1] = rows[1] >>>df_actions id actions 0 12 [{'type': 'a', 'value': '17'}, {'type': 'b', '... 1 15 [{'type': 'a', 'value': '1'}, {'type': 'b', 'v... 

quiero

 >>>df_actions_parsed id type value 12 a 17 12 b 19 15 a 1 15 b 3 15 c 5 

Puedo normalizar los datos JSON usando:

 pd.concat([pd.DataFrame(json_normalize(x)) for x in df_actions['actions']],ignore_index=True) 

pero no sé cómo volver a unir eso a la columna id del DataFrame original.

Puede usar concat con dict comprehension con pop para extraer columna, eliminar segundo nivel y join al original:

 df1 = (pd.concat({i: pd.DataFrame(x) for i, x in df_actions.pop('actions').items()}) .reset_index(level=1, drop=True) .join(df_actions) .reset_index(drop=True)) 

Lo que es igual a:

 df1 = (pd.concat({i: json_normalize(x) for i, x in df_actions.pop('actions').items()}) .reset_index(level=1, drop=True) .join(df_actions) .reset_index(drop=True)) 

 print (df1) type value id 0 a 17 12 1 b 19 12 2 a 1 15 3 b 3 15 4 c 5 15