10
Сен
2016

Как заменить значения одной переменной значениями других?

Дан набор данных с целевой переменнойpglabgro. Список значения переменных приведён ниже:

pglabgro (=pglabgro) - Текущий валовой доход в евро emp_full - полная занятость (бинарная переменная) emp_not - безработный (бинарная переменная) i11103 - трудовой доход домашнего хозяйства ijob1 - доход от основной работы ijob2 - Доходы от вторичной занятости

Данные выглядят следующим образом:

IncomeSet[IncomeSet["pglabgro"]<0].head()
Out[32]: 
            pid  syear     cid     hid  pglabgro  emp_full  emp_part  emp_not  \
330416  2585401   2006  258547  258547        -2         0         0        1   
330425   492301   2006   49239   49239        -2         0         0        1   
330428  3069801   2006  306983  306983        -2         0         0        1   
330429  2684101   2006  268410  268410        -2         0         0        1   
330432  3038501   2006  303852  303852        -2         0         0        1   

        i11103  ijob1  ijob2  plc0013                              
330416       0      0      0       -2  
330425     720      0      0       -2  
330428       0      0      0       -2  
330429       0      0      0       -2  
330432    9396   9396      0       -2 

Значение переменной -2 означает что ответ на вопрос: "какой ваш текущий валковый доход?", не был дан. И отсутствие данных по этой переменной pglabgro характерно для тех людей кто не имеет работы (emp_not=1). Но таких значений очень много и при этом у некоторых людей всё же имеются доходы от основной или вторичной работы или доход домохозяйства (i11103, ijob1, ijob2).

Поэтому хотелось бы сократить количество отсутствующих данных путем присвоения значений для переменной pglabgro из переменных i11103, ijob1 и ijob2.

Для этого я написал следующую функцию:

for x in list(IncomeSet["pglabgro"]):
    if IncomeSet[IncomeSet["pglabgro"].ix[x]<0]:
        if IncomeSet[IncomeSet["i11103"]>=0 & IncomeSet["i11103"]]<=0:
            if IncomeSet[IncomeSet["ijob1"]>=0 & IncomeSet["ijob1"]]<=0:
                if IncomeSet[IncomeSet["ijob2"]>=0 & IncomeSet["ijob2"]]<=0:
                    IncomeSet["pglabgro"].ix[x]=-2
                else: 
                    IncomeSet["pglabgro"].ix[x]==IncomeSet["ijob2"]
            else:
                    IncomeSet["pglabgro"].ix[x]==IncomeSet["ijob1"]
        else:
                IncomeSet["pglabgro"].ix[x]==IncomeSet["i11103"]
    else:
            IncomeSet["pglabgro"].ix[x]==IncomeSet["pglabgro"]

Но я получаю ошибку: KeyError: 400
И пока не знаю как улучшить логику присвоения.

Результат согласно приведённому выше образцу данных должен выглядить следующим образом:

                pid  syear     cid     hid  pglabgro  emp_full  emp_part  emp_not  \
    330416  2585401   2006  258547  258547        -2         0         0        1   
    330425   492301   2006   49239   49239       720         0         0        1   
    330428  3069801   2006  306983  306983        -2         0         0        1   
    330429  2684101   2006  268410  268410        -2         0         0        1   
    330432  3038501   2006  303852  303852      9396         0         0        1   

        i11103  ijob1  ijob2  plc0013                              
330416       0      0      0       -2  
330425     720      0      0       -2  
330428       0      0      0       -2  
330429       0      0      0       -2  
330432    9396   9396      0       -2 

Логика была такой:
Если значение переменной pglabgro из списка значений этой переменной равно -2, то мы смотрим на значение переменной дохода домохозяйства - i11103. Если Она отлична от нуля, то берём её значение, если нет, то переходим к переменной ijob1 (доход от основной работы). Если эта переменная отлична от нуля то присваиваем переменной pglabgro её значение, если она равна нулю, то переходим к последней переменной ijob2 (Доходы от вторичной занятости), если она равна нулю, то переменная pglabgro остаётся со значением -2. Если ijob2 > 0, то присваиваем её значение переменной pglabgro.

Таким образом для pglabgro мы заменяем значения -2 в соответствии с имеющимися значениями переменных i11103, ijob1 и ijob2.

Как заменить значения одной переменной значениями других?

Источник: https://ru.stackoverflow.com/questions/564962/%D0%9A%D0%B0%D0%BA-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8-%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85

Тебе может это понравится...

Добавить комментарий