Python 如何通过循环创建新列?

Python 如何通过循环创建新列?,python,pandas,loops,Python,Pandas,Loops,我一直在使用一个关于机器学习住房的数据集。在尝试减少数据集的维度时,我想将“yr_Build”和“yr_Renewad”这两个列合并到一个新的列“age”(房子的) 我正在尝试从两个预定义的列((year_Build)和(year_Renewad))创建一个新的列年龄。“修复年份”列的值类似于“年份”(例如,如果修复,则为1991年),如果未修复,则为0 我在这里尝试使用的逻辑是,如果发生了翻修,建筑物的年龄是当前年份-翻修年份,即 [age = 2019 - year_renovated]

我一直在使用一个关于机器学习住房的数据集。在尝试减少数据集的维度时,我想将“yr_Build”和“yr_Renewad”这两个列合并到一个新的列“age”(房子的)

我正在尝试从两个预定义的列((year_Build)和(year_Renewad))创建一个新的列年龄。“修复年份”列的值类似于“年份”(例如,如果修复,则为1991年),如果未修复,则为0

我在这里尝试使用的逻辑是,如果发生了翻修,建筑物的年龄是当前年份-翻修年份,即

[age = 2019 - year_renovated]
如果未进行翻新:建筑年限为当年-施工年份,即

[age = 2019 - year_built]
新数据的图像显示在下图中

我尝试使用for循环来实现相同的功能,代码如下:

我也试着用

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代码帮助


感谢您
查看df.iterrows()中的行
?问题与
机器学习无关
-请不要发送不相关的标签(已删除)。嘿@desertnaut我已经开始学习python和机器学习了。!这与数据预处理有关。希望你现在明白为什么我把机器学习纳入了tagI-see;对于未来,请记住标签是关于问题的内容,而不是它的上下文。非常感谢。。我正在学习编程。。你能简单地解释一下吗!!第一步-你为每一行准备元组,像这样(642019,False),(6228,True)-清楚吗?第二步是(x[0],x[1])x[2],所以在实际数据中看起来像(642019)[False]或(642019)[0]——从元组中选择索引为0的元素——它是64。以此类推,下一行(62,28)[True]是(62,28)[1]-您选择索引为1的元素-是28,这个解决方案和解释有帮助吗?
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
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