pandas DataFrame: пересчет колонки, применяя условия

df = pd.DataFrame({'v': [0, 0, 0], 'a': [95.71, 6.61, 80], 'p': [88.57, 4.55, 60]})
c = float(1 + ((p + 6.9) + ((p + 6.9)/100 * 4.5)))

res = float()

def func():
    d = a - c
    if d > 1:
        if d / 100 * 20 >= 1:
            res = float(a - (d / 100 * 20))
        else:
            res = float(a - 1)
    else:
        res = float(c)
    return res


if c >= 75 and c >= a:
    res = float(c)
elif c >= 75 and c < a:
    res = float(func())
elif c < 75:
    c = float(1 + (p + (p / 100 * 4.5)))
    if c > a:
        res = float(c)
    elif c < a:
        res = float(func())

df['a'] = res

Добрый день! Подскажите, пожалуйста, как пересчитать колонку "p" с помощью формулы? Результат должен попасть в колонку "v"

Есть рабочий код но без участия DataFrame

a = (80)
b = (60)
c = float(1 + ((b + 6.9) + ((b + 6.9)/100 * 4.5)))
res = float()
def func():
    d = a - c
    if d > 1:
        if d / 100 * 20 >= 1:
            res = float(a - (d / 100 * 20))
        else:
            res = float(a - 1)
    else:
        res = float(c)
    return res


if c >= 75 and c >= a:
    res = float(c)
elif c >= 75 and c < a:
    res = float(func())
elif c < 75:
    c = float(1 + (b + (b / 100 * 4.5)))
    if c > a:
        res = float(c)
    elif c < a:
        res = float(func())

print(res)

введите сюда описание изображения


Ответы (1 шт):

Автор решения: passant

Несколько раз перечитал ваш вопрос - то так и не понял. Естественно, первый код не рабочий, а второй непонятно что делает.

Поэтому даю ответ на ту часть вашего вопроса, которую понять удалось, а именно "как пересчитать колонку "p" с помощью формулы? Результат должен попасть в колонку "v"

Вот ваш исходный датафрейм

   v      a      p
0  0  95.71  88.57
1  0   6.61   4.55
2  0  80.00  60.00

Вот код

df.v=1 + ((df.p + 6.9) + ((df.p + 6.9)/100 * 4.5))

Вот полученный результат:

         v      a      p
0  100.76615  95.71  88.57
1   12.96525   6.61   4.55
2   70.91050  80.00  60.00

Если надо передать несколько параметров в функцию apply, делается это примерно так:

def rule(x, y):
    if ......:
         return 1
    else:
         return 0
df.v = incidence.apply(lambda x: rule(x.a, x.b), axis =  1)
→ Ссылка