python - 如何循环创建一个新列?
问题描述
我一直在使用住房数据集进行机器学习。在尝试减小数据集的维度时,我想将 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']
错误说布尔错误
请帮助代码。
谢谢你
解决方案
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
推荐阅读
- java - Spring Boot - 接口和一些功能实现
- python - 两个列表之间的距离相似度
- javascript - 使用 undescore.js,我正在尝试将给定的输入格式化为预期的输出
- sql - 如何在 Firebird 的限制视图上授予用户 SELECT
- node.js - Heroku:显示 json 数据而不是 UI
- autodesk-forge - 在 Forge 查看器中识别上传的 Revit 模型中的只读参数
- reactjs - React Native Axios -> 等待异步响应,如果为真则导航到新页面
- angular9 - 升级到angular 9时的three.js错误
- jenkins - 在 groovy 中创建命名步骤
- python - Python有条件地记录到不同的目的地