Как создать новый столбец за циклом? - PullRequest
0 голосов
/ 20 октября 2019

Я использую набор данных о жилье для машинного обучения. пытаясь уменьшить размеры набора данных, я хотел объединить 2 столбца, а именно 'yr_built' и 'yr_renovated', в новый столбец age (of the house).

я пытаюсь создать новый столбецвозраст из 2 предопределенных столбцов ((year_built) и (year_renovated)). в столбце обновленного года указаны значения, например, год (например, 1991 год, если отремонтирован) или 0, если он не отремонтирован.

Логика, которую я здесь пытаюсь использовать, заключается в том, что если ремонт произошел, то возраст здания - текущий год - годобновление, т. е.

[age = 2019 - year_renovated]

Если ремонт не проводился: возраст здания - текущий год - год строительства, т. е.

[age = 2019 - year_built]

изображение новых данных отображается на следующем рисунке

Я попытался использовать цикл for для того же самого, и код выглядит следующим образом:

кадр данных находится во вложении этой картинки

for i in pp['age']:
if pp['yr_renovated'] = 0:
    ppnew['age'] = 2019 - pp['yr_built']
else:
   ppnew['age'] = 2019 - pp['yr_renovated']

и я также пытался использовать

for i in pp['age']:
if pp['yr_renovated'] == 0: #truth value
    ppnew['age'] = 2019 - pp['yr_built']
else:
   ppnew['age'] = 2019 - pp['yr_renovated']

ошибка говорит о логической ошибке

PLZ помочь с кодом.

спасибо

1 Ответ

0 голосов
/ 20 октября 2019
df['age'] = list(zip(2019 - df['yr_built'], 2019 - df['yr_renovated'], df['yr_renovated'] != 0))
df

Out[1]:

        price   bedrooms    bathrooms   floors  view    grade   yr_built    yr_renovated    zipcode age
0   2219000     3           1.00        1       0       7       1955        0               500178  (64, 2019, False)
1   5380000     3           2.25        2       0       7       1951        1991            500125  (68, 28, True)
2   1800000     2           1.00        1       0       6       1933        0               500028  (86, 2019, False)
3   6040000     4           3.00        1       0       7       1965        0               500136  (54, 2019, False)
4   5100000     3           2.00        1       0       8       1987        0               500074  (32, 2019, False)


df['age'] = [(x[0],x[1])[x[2]] for x in df['age']]

Out[2]:


    price   bedrooms    bathrooms   floors  view    grade   yr_built    yr_renovated    zipcode age
0   2219000     3       1.00        1       0       7       1955        0               500178  64
1   5380000     3       2.25        2       0       7       1951        1991            500125  28
2   1800000     2       1.00        1       0       6       1933        0               500028  86
3   6040000     4       3.00        1       0       7       1965        0               500136  54
4   5100000     3       2.00        1       0       8       1987        0               500074  32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...