Вот возможное решение.Тем не менее, вы должны выяснить все возможные значения ключа заранее.Я думаю, это можно сделать программно, но я здесь их жестко закодировал.Кроме того, если в стоимости есть несколько элементов, он займет первое.
import pandas as pd
import json
# original dataframe
df = pd.DataFrame({'x':['''[{"key":"Gender","value":["Men"]},
{"key":"Shoe Size","value":["M"]},
{"key":"Shoe Category","value":["Men's Shoes"]},
{"key":"Color","value":["Multicolor"]},
{"key":"Manufacturer Part Number","value":["8190-W-NAVY-7.5"]},
{"key":"Brand","value":["Josmo"]}]''',
'''[{"key":"Gender","value":["Women"]},
{"key":"Shoe Size","value":["M"]},
{"key":"Shoe Category","value":["Women's Shoes"]},
{"key":"Color","value":["Multicolor"]},
{"key":"Manufacturer Part Number","value":["8190-W-NAVY-7.5"]}]'''],
'y':['A','B']})
expanded_columns = ['Gender', 'Shoe Size', 'Shoe Category', 'Color',
'Manufacturer Part Number', 'Brand']
# function to create list of values from json text
def json_to_cols(s):
l = json.loads(s)
d = {i:None for i in expanded_columns}
for row in l:
d[row['key']] = row['value'][0]
return list(d.values())
# Create new dataframe with expanded columns
df1 = df.apply(lambda row: pd.Series(json_to_cols(row['x']), index=expanded_columns),
axis=1)
new_df = df.join(df1)
print(new_df)