Я хочу отфильтровать фрейм данных и добавить значение в новый/существующий столбец в фрейме данных. Например, в следующем кадре данных я хочу добавить значение 0,7 к предварительному среднему столбцу, где значения месяца равны 11. Другими словами, столбец pre_mean должен содержать значения 0,7 в строках со 2 по 5, в то время как все остальные столбцы должны имеют значение NaN.
Я пробовал что-то подобное, но, конечно, это неправильно.
df[:pre_mean] = ifelse.(df[:month] .== 11, 0.7, df)
В python это можно сделать с помощью функций pd.apply или np.where,
#How to do in python
df["pre_mean"] = np.where(df["month"] == 11, 0.7, None)
Но я понятия не имею, как добиться этого в Джулии? Есть идеи?
df[df.month .== 11, :pre_mean] .= 0.7
Это должно работать.
Также ответ в вопросе почти правильный:
df.pre_mean .= ifelse.(df.month .== 11, 0.7, df.premean)
что должно быть быстрее, чем решение, предложенное @Andy_101 (что также правильно), поскольку оно не выделяет.
В качестве примечания обратите внимание, что df[:pre_mean]
не разрешено в DataFrames.jl. Фрейм данных — это двумерный объект, поэтому вам нужно передать селектор строк и столбцов (если вы не используете метод getproperty
, как в ответе @Andy_101 и моем).