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