Создайте новый столбец панд, который представляет собой список списков - PullRequest
0 голосов
/ 18 сентября 2019

У меня есть две таблицы, которые выглядят примерно так:

data = [['tom', [3,5]], ['nick', [3,8]], ['juli', [3]]] 
dfA = pd.DataFrame(data, columns = ['Name', 'job_id'])


data1 = [['coder', 3], ['cook', 5], ['cop', 8]]
df_B = pd.DataFrame(data1, columns = ['job', 'job_id']) 

И я хотел бы добавить столбец к первой таблице так, чтобы он выглядел так:

data_comb = [['tom', ['coder','cook']], ['nick', ['coder','cop']], ['juli', ['coder']]] 
df_comb = pd.DataFrame(data_comb, columns = ['Name', 'jobs_done'])

Я получаю необъяснимую ошибку в списке, вероятно, из-за списка в столбце.Указатели о том, как решить эту проблему, будут оценены.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2019
mapper = df_B.set_index('job_id').to_dict()['job']
dfA['job_id'] = dfA['job_id'].apply(lambda lst: [mapper.get(x) for x in lst])

вывод:

>>>dfA

    Name    job_id
0   tom     ['coder', 'cook']
1   nick    ['coder', 'cop']
2   juli    ['coder']
0 голосов
/ 18 сентября 2019

Вы можете использовать словарь для сопоставления списков:

lookup = {key : value for value, key in data1}
dfA['job_id'] = dfA.job_id.apply(lambda x : [lookup[v] for v in x])
print(dfA)

Вывод

   Name         job_id
0   tom  [coder, cook]
1  nick   [coder, cop]
2  juli        [coder]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...