Я думаю, изменив мой ответ на ваш предыдущий вопрос, вы сможете добиться того, чего хотите. Еще начните с заполнения nan
пустым списком:
df['actions'][df['actions'].isnull()] = df['actions'][df['actions'].isnull()].apply(lambda x: [])
Затем определите функцию find_action
с другим параметром what
:
def find_action (list_action, action_type, what):
for action in list_action:
# for each action, see if the key action_type is the one wanted and what in the keys
if action['action_type'] == action_type and what in action.keys():
return action[what]
# if not the right action type found, then empty
return ''
Теперь вы можете использовать apply
с двумя аргументами:
df['a2cart_view'] = df['actions'].apply(find_action, args=(['add_to_cart','view']))
df['a2cart_click'] = df['actions'].apply(find_action, args=(['add_to_cart','click']))
df['pur_view'] = df['actions'].apply(find_action, args=(['purchase','view']))
df['pur_click'] = df['actions'].apply(find_action, args=(['purchase','click']))
и опустите столбец actions
:
df = df.drop('actions',axis=1)