Слияние и создание словаря из столбцов Dataframe - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть DataFrame, подобный этому

Question        Response
"How are you?"  ["high","moderate"]
"how is it?"    ["cool","low"]

, и я хочу, чтобы выходной df был как

Question        Response                     
"How are you?"  [{"weight":"1","Response":"high"},{"Weight":"2","Response":"moderate"}]  
"how is it?"    [{"weight":"1","Response":"cool"},{"Weight":"2","Response":"low"}]

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Мы можем написать пользовательскую функцию для создания словаря:

def convert_list(x):
    lst = [{'weight': i+1, 'Reponse': val} for i, val in enumerate(x)]
    return lst

df['Reponse'] = df['Response'].apply(lambda x: convert_list(x))

         Question  \
0  "How are you?"   
1    "how is it?"   

                                                                   Response  
0  [{'weight': 1, 'Reponse': 'high'}, {'weight': 2, 'Reponse': 'moderate'}]  
1       [{'weight': 1, 'Reponse': 'cool'}, {'weight': 2, 'Reponse': 'low'}]  
0 голосов
/ 02 апреля 2020

использование map (обычно очень быстрое):

df['Response'] = list(map(lambda val: list(map(lambda d:{'Weight' : d[0], 
                                                         'Response' : d[1]},
                                               enumerate(val, 1))),
                          df['Response']))

или comprehension list

df['Response'] = [[{'Weight' : weight, 'Response' : response} 
                   for weight, response in enumerate(val, 1)] 
                  for val in df['Response']]

Выход

print(df)

         Question  \
0  "How are you?"   
1    "how is it?"   

                                                                   Response  
0  [{'Weight': 1, 'Response': 'high'}, {'Weight': 2, 'Response': 'moderate'}]  
1       [{'Weight': 1, 'Response': 'cool'}, {'Weight': 2, 'Response': 'low'}]  
...