Я ищу быстрый (векторизованный) способ выполнения вычислений с использованием содержимого фрейма данных Pandas.
Мой фрейм данных содержит 2 метки для каждой строки, и я хочу найти значения, соответствующие каждой метке (из словаря/списка), и выполнить расчет, возвращая результат в новый столбец в фрейме данных.
Ниже я привожу свой рабочий пример с использованием циклов.
label1s = np.array(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], dtype=str)
label2s = np.array(['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], dtype=str)
data = np.column_stack([label1s, label2s])
label_values = {'A':1, 'B':2, 'C':3}
df = pd.DataFrame(data=data, columns=['Label1', 'Label2'])
new_col = np.zeros_like(label1s, dtype=float)
for index, row in df.iterrows():
val1 = label_values[row['Label1']]
val2 = label_values[row['Label2']]
new_col[index] = val1 - val2
df['result'] = new_col
df
Однако для больших наборов данных петля крайне нежелательна и медленна.
Пожалуйста, есть ли способ оптимизировать это?
Я изучил некоторые функции pandas, такие как «Поиск», но, похоже, для этого нужны массивы каждого размера, тогда как в моем случае мне нужно искать значения из внешнего списка и разных размеров для фрейма данных.