Вопрос по dataframe – Условно заполнить значения столбцов на основе другого значения столбцов в пандах
у меня естьDataFrame
с несколькими столбцами. Один столбец содержит символ, для которого используется валюта, например знак евро или доллар. Другой столбец содержит значение бюджета. Так, например, в одном ряду это может означать бюджет в 5000 евро, а в следующем ряду - 2000 долларов.
В пандах я хотел бы добавить дополнительный столбец в мой DataFrame, нормализуя бюджеты в евро. Таким образом, в основном, для каждой строки значение в новом столбце должно быть значением из столбца бюджета * 1, если символ в столбце валюты является знаком евро, а значение в новом столбце должно быть значением столбца бюджета * 0,78125, если символ в столбце валюты является знаком доллара.
Я знаю, как добавить столбец, заполнить его значениями, скопировать значения из другого столбца и т. Д., Но не знаю, как заполнить новый столбец условно на основе значения другого столбца.
Какие-либо предложения?
сании функции, выполняющей нужную операцию в строке, используяrow['fieldname']
синтаксис для доступа к отдельным значениям / столбцам, а затем выполнитьDataFrame.apply метод на это
Это повторяет ответ на вопрос, связанный здесь:Панды создают новый столбец на основе значений из других столбцов
def normalise_row(row):
if row['Currency'] == '$'
...
...
...
return result
df['Normalized'] = df.apply(lambda row : normalise_row, axis=1)
вы можете использовать словарь функций, чтобы установить различные условия для ваших функций. Такое решение расширяет сферу вопроса.
Я использую пример из личного приложения.
# write the dictionary
def applyCalculateSpend (df_name, cost_method_col, metric_col, rate_col, total_planned_col):
calculations = {
'CPMV' : df_name[metric_col] / 1000 * df_name[rate_col],
'Free' : 0
}
df_method = df_name[cost_method_col]
return calculations.get(df_method, "not in dict")
# call the function inside a lambda
test_df['spend'] = test_df.apply(lambda row: applyCalculateSpend(
row,
cost_method_col='cost method',
metric_col='metric',
rate_col='rate',
total_planned_col='total planned'), axis = 1)
cost method metric rate total planned spend
0 CPMV 2000 100 1000 200.0
1 CPMV 4000 100 1000 400.0
4 Free 1 2 3 0.0