Вопрос, который у меня есть, тесно связан с этой записью.
Предположим, у меня есть следующий набор данных:
df = pd.DataFrame({"A":range(1,10), "B":range(5,14), "Group":
[1,1,2,2,2,2,3,3,3],"C":[0,0,10,0,0,16,0,0,22], "last":[0,1,0,0,0,1,0,0,1],
"Want": [19.25,8,91.6,71.05,45.85,16,104.95,65.8,22]})
Последнее наблюдение за группой прямо. Вот как выглядит код:
def calculate(df):
if (df.last == 1):
value = df.loc["A"] + df.loc["B"]
else:
для всех других наблюдений на группу, значение строки рассчитывается следующим образом:
value = (df.loc[i-1, "C"] + 3 * df.loc[i, "A"] + 1.65 * df.loc[i, "B"])
return value
Для дальнейшего уточнения, это формулы для расчета столбца Want для группы 2 с использованием excel: F4 = "F5 + (3 * A4) + (1.65 * B4)", F5 = "F6 + (3 * A5) + ( 1,65 * B5) ", F6 =" F7 + (3 * A6) + (1,65 * B6) ", F7 =" A7 + B7 ". В этом есть какая-то «рекурсивная» природа, поэтому я подумал о «цикле for»
Я бы очень признателен за решение, в котором оно согласуется с первым утверждением if. Это
value = something
, а не функция, возвращающая фрейм данных или что-то в этом роде, так что я могу вызвать функцию, используя следующий
df["value"] = df.apply(calculate, axis=1)
Ваша помощь приветствуется. Спасибо