У меня есть следующий фрейм данных:
c1 c2 freq
0 a [u] [4]
1 b [x, z, v] [8, 3, 15]
Я хочу получить другой столбец "dict" такой, что
c1 c2 freq dict
0 a [u] [4] {'u':4}
1 b [x, z, v] [8, 3, 15] {'x':8, 'z':3, 'v':15}
Я пытаюсь этот код: d["dict"] = d.apply(lambda row: dict(zip(row["c2"], row["freq"])))
, но этовыдает ошибку: KeyError: ('c2', u'occurred at index c1')
Не уверен, что я делаю не так.В целом упражнение состоит в том, что у меня есть глобальный словарь, определенный следующим образом: {"u":4, "v":15, "x":8, "z":3}
, и мой начальный кадр данных:
c1 c2
0 a u
1 b [x, z, v]
, где [x, z, v]
- это массив пустышек.Для каждой строки я хочу сохранить 2 верхних элемента (если это массив) с самыми высокими значениями из глобального словаря, поэтому для второй строки я сохраню x
и v
.Для этого я преобразовал каждый элемент столбца c2
в список, создал новый столбец с соответствующими частотами и теперь хочу преобразовать его в словарь, чтобы можно было отсортировать его по значениям.Затем я сохраню 2 верхние клавиши словаря этой строки.
d["c2"] = d["c2"].apply(lambda x: list(set(x)))
d["freq"] = d["c2"].apply(lambda x: [c[j] for j in x])
d["dict"] = d.apply(lambda row: dict(zip(row["c2"], row["freq"])))
Третья строка вызывает проблемы.Кроме того, если есть более эффективная процедура для всего этого, я буду рад любому совету.Спасибо!