Учитывая столбец фрейм данных pandas, как заменить элементы X во вложенном списке значениями в словаре, если X является ключом в словаре?

#python #pandas #dataframe

Вопрос:

Надеюсь, у вас все хорошо. Допустим, у меня есть некоторый фрейм данных df_smth, такой, что:

 in [1]: df_smth  out [1]:   | | Dict_Col | Perm_Col |  | -------- |------------- | ------------------------| | 0 | {1:a, 2:b, 3:c}| [[1, 2], [1, 3], [2, 3]]| | 1 | {1:a, 3:c, 2:b}| [[1, 1], [2, 3], [1, 3]]|  

И я хочу получить

 | | New_Perm_Col |  | -------- | ------------------------| | 0 | [[a, b], [a, c], [b, c]]| | 1 | [[a, a], [b, c], [a, c]]|  

Спасибо!

Комментарии:

1. Есть ли способ решить эту проблему, не полагаясь на цикл for? Я пытаюсь понять, как решить эту проблему с помощью apply и lambda f-n. Спасибо!

Ответ №1:

Вы можете разбить Perm_Col столбец на столбец с отдельными списками, использовать apply для выполнения замены строк, а затем groupby снова объединиться в списки

 df2 = pd.DataFrame(  df_smth.explode('Perm_Col')  .apply(lambda row: [row.Dict_Col.get(x, x) for x in row.Perm_Col], axis=1)  .groupby(lambda x: x)  .apply(lambda g: list(g))  .rename('Perm_Col') ) df2 # returns:  Perm_Col 0 [[a, b], [a, c], [b, c]] 1 [[a, a], [b, c], [a, c]]  

Комментарии:

1. Это потрясающе! Спасибо. Я попытаюсь использовать ваш ответ, чтобы теперь рассчитать нечеткий процент между строками в Perm_Col.