Итак, я создал pandas фрейм данных из следующего csv:
id age00 education marital gender ethnic industry income00
0 51.965 17 0 1 0 5 76110
1 41.807 12 1 0 0 1 43216
2 36.331 12 1 0 1 3 52118
3 56.758 9 1 1 2 2 47770
Моя цель - создать новый столбец с именем future_income , который берет каждую строку и вычисляет будущее доход с использованием моей модели.
Это делается с помощью переменной gnasttFinalIncome в классе, который я создал ниже:
class myModel:
def __init__(self, bias) :
self.bias = bias # bias is a dictionary with info to set bias on the gender function and the ethnic function
def b_gender(self, gender):
effect = 0
if (self.bias["gender"]): # if there is gender bias in this model/world (from the constructor)
effect = -0.0005 if (gender<1) else 0.0005 # This amount to 1.2% difference annually
return self.scale * effect
def b_ethnic(self, ethnic):
effect = 0
if (self.bias["ethnic"]): # if there is ethnic bias in this model/world (from the constructor)
effect = -0.0007 if (ethnic < 1) else -0.0003 if (ethnic < 2) else 0.0005
return self.scale * effect
# other methods/functions
def predictGrowthFactor( self, person ): # edited
factor = 1 + person['education'] + person['marital'] + person['income'] + person['industry']
return factor
def predictIncome( self, person ): # perdict the new income one MONTH later. (At least on average, each month the income grows.)
return person['income']*self.predictGrowthFactor( person )
def predictFinalIncome( self, n, person ):
n_income = self.predictIncome( person )
for i in range(n):
n_income = n_income * i
return n_income
n в данном случае равно 120.
Итак, вкратце. Я хотел бы взять каждую строку, бросить ее в функцию класса с именем pregnetFinalIncome и иметь новую переменную на моем df с именем future_income, которая является их доходом за 120 месяцев.
РЕДАКТИРОВАТЬ:
Мне на самом деле не нужен личный класс. Я случайно удалил свой init__ в классе, который определяет аргумент 'смещение'. Вместо этого, основываясь на коде @Cavin Dsouza. Но это не работает.
Код читается следующим образом:
utopModel = myModel( { "gender": False, "ethnic": False } ) # no bias
n =120
#Utopia
u = utopModel
world1['incomeFinal_utop'] = world1.apply(lambda row: u.predictFinalIncome(n, row), axis=1)
Таким образом, ошибка заключается в следующем, когда он переходит к предсказаниюFinalIncome:
TypeError: 'str' object cannot be interpreted as an integer
During handling of the above exception, another exception occurred:
KeyError
KeyError: 'income'