我正在尝试从2个预定义列((year_built)和(year_renovated))创建新的列年龄。装修年份的列具有年份(例如,如果装修则为1991)或如果未装修则为0。
我要在此处使用的逻辑是,如果进行了翻新,则建筑的年龄就是当前的翻新年份-
[年龄= 2019-年装修]
如果未进行过装修:建筑物的年龄为当年-建造年,即
[年龄= 2019-年建成]
the image of the ppnew data is displayed in following picture
我已经尝试过使用for循环,其代码如下:
[enter image description here][1]
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代码帮助。
谢谢
答案 0 :(得分:1)
我不确定您想要达到什么目标(如果有所不同,请向问题中添加预期的输出),但在我看来是这样的:
import pandas as pd
import numpy as np
import time
np.random.seed(1)
nRows = 25000
nCols = 10000
numberOfChunks = 5
df = pd.DataFrame(index=range(nRows ), columns=range(1))
df2 = df.apply(lambda row: np.random.rand(nCols), axis=1)
for start, stop in zip(np.arange(0, nRows , int(round(nRows/float(numberOfChunks)))),
np.arange(int(round(nRows/float(numberOfChunks))), nRows + int(round(nRows/float(numberOfChunks))), int(round(nRows/float(numberOfChunks))))):
df2tmp = df2.iloc[start:stop]
if start == 0:
df3 = pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
continue
df3tmp = pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
df3 = pd.concat([df3, df3tmp])
我认为import numpy as np
ppnew['age1'] = np.where(pp['yr_renovated']==0, 2019 - pp['yr_built'] , 2019 - pp['yr_renovated'])
数据帧已经存在。