У меня есть три столбца в фрейме данных Pandas A, B и C. У меня также есть 3 словаря: dict_A, dict_B, dict_C, которые имеют все значения A, B и C в качестве ключей в каждом соответствующем кадре данных. Я пытаюсь создать 2 новых столбца в фрейме данных, которые используют данные из этих словарей как часть вычислений. Это то, что я попробовал
df['weight_A'] = (dict_A[df['A']] * dict_C[df['C']])
df['weight_B'] = (dict_B[df['B']] * (1 - dict_C[df['C']]))
Я не могу этого сделать, потому что не могу использовать серию в качестве ключа к кадру данных. Я знаю, что могу перебирать строки, но хочу сделать это векторизованным.
Вы можете использовать карту:
df["weight_A"] = df["A"].map(dict_A) * df["C"].map(dict_C)
df["weight_B"] = df["B"].map(dict_B) * (1 - df["C"].map(dict_C))
@VishnudevKrishnadas Верно, но для этого потребуется больше памяти, поэтому это компромисс, который следует учитывать в зависимости от того, как выглядит набор данных.
Сохраните сопоставленные столбцы в переменных, чтобы повысить эффективность. Например: он будет отображаться дважды для столбца C.