如何循环创建新列?

时间:2019-10-20 09:05:49

标签: python pandas loops

我一直在使用机器上的外壳数据集。在尝试减小数据集的尺寸时,我想将2列(即yr_built)和yr_renovated合并到新的列“ age”(房屋)。

我正在尝试从2个预定义列((year_built)和(year_renovated))创建新的列年龄。 “翻新的年份”列具有年份(例如,如果翻新则为1991)或如果未翻新则为0的值。

我要在此处使用的逻辑是,如果进行了装修,则建筑物的使用年限是当前的年-即装修年。

[age = 2019 - year_renovated]

如果未进行过装修:建筑物的年龄为当前年份-建筑物的年份,即

[age = 2019 - year_built]

ppnew数据的图像显示在下图中

我已经尝试过使用for循环,其代码如下:

the dataframe is in this pic attachment

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 :(得分:0)

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