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)
