首页 > 解决方案 > 如何循环创建一个新列?

问题描述

我一直在使用住房数据集进行机器学习。在尝试减小数据集的维度时,我想将 2 列,即“yr_built”和“yr_renovated”合并到一个新列“age”(房子的)。

我正在尝试从 2 个预定义的列((year_built)和(year_renovated))创建一个新的列年龄。year renovated 列的值类似于年份(例如,如果已翻新,则为 1991)或如果未翻新,则为 0。

我在这里尝试使用的逻辑是,如果进行了翻新,则建筑物的年龄是当前年份-翻新年份,即

[age = 2019 - year_renovated]

如果没有进行翻新:建筑年龄是当年 - 建造年份,即

[age = 2019 - year_built]

ppnew数据的图像如下图所示

我曾尝试使用 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']

错误说布尔错误

请帮助代码。

谢谢你

标签: pythonpandasloops

解决方案


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

推荐阅读