Сначала небольшая предварительная обработка:
df['program_ids'] = df['program_ids'].map(lambda x: [] if pd.isnull(x) else x)
df
student name program_ids
0 Alex [1, 2, 7]
1 Tim [37]
2 May [17, 1, 11]
3 Gloria []
4 James [37, 42]
5 Nina []
Затем создайте отображение идентификатора программы на значения:
mapping = dict(prog_df.values)
Используйте это для привязки идентификаторов к программам с пониманием списка (для исполнения):
df['program_ids'] = [[mapping.get(x) for x in l] for l in df['program_ids']]
df
student name program_ids
0 Alex [Arts, Music, Dance]
1 Tim [Languages]
2 May [Chemistry, Arts, Physics]
3 Gloria []
4 James [Languages, Math]
5 Nina []
И, наконец, в качестве необязательного шага для объединения списков используйте str.join
:
df['program_ids'].str.join(',').replace('', np.nan)
0 Arts,Music,Dance
1 Languages
2 Chemistry,Arts,Physics
3 NaN
4 Languages,Math
5 NaN
Name: program_ids, dtype: object