Предположим, у меня есть следующий набор данных:
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
На простом английском это то, что я пытаюсь сделать. Для последнего наблюдения в каждой группе столбец C
равен сумме столбцов A and B
Для всех других наблюдений я хотел бы вычислить значение столбца C
снизу вверх, используя приведенное выше «утверждение else» (которое есть для подтверждения концепции).
Для дальнейшего пояснения, это формулы для вычисления столбца Want
для Group 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 statement.
То есть
value = something
, а не функция, возвращающая фрейм данных или что-то в этом роде, так что я могу вызвать функцию с помощью следующего
df["value"] = df.apply(calculate, axis=1)
Ваша помощь приветствуется. Спасибо