房价预测 Task2-4
Task 1 的文章:点这里
Task 2
计算每个agent的平均Y_area
pandas提供了.mean()
函数,求解行/列的均值。所以我们需要构造符合要求的数据帧。
df_2= df[['AgentId', 'Y house price of unit area']]
mean = [] # (1)
for i in range(6):
mean.append(df_2[df_2['AgentId'] == i]['Y house price of unit area'].mean()) # (2)
(1)这里要先定义一个空的list
。定义方法有两种:mean = []
或mean = list()
(2)使用了“Task 1”最后说到的分割。这种分割方法真的很高效,推荐使用。
这里往列表里添加元素,使用了list.append()
的方法。你可能会想,mean[i]=...
的方式可以吗?
这是不可以的。会有一个list out of range
的错。
当然最后也要求了降序排列,方法和以前也是一致的。
Task 3
计算(1)每年;(2)每个agency每年 的平均Y_area
。这是两问。
第(1)问需要对年进行筛选;如果在'Task 1'做了agency的表格,那么这一个任务的第(2)问就会很简单。
总而言之,思路就是裁剪数据表,使用内置.mean()
函数计算均值。
计算每个agency每年的均值
df_3 = df[['AgentId','X1 transaction date','Y house price of unit area']]
# seperate each Agency
df_3_a0 = df_3[(df_3['AgentId']==0)]
df_3_a1 = df_3[(df_3['AgentId']==2) | (df_3['AgentId']==3) | (df_3['AgentId']==5)] # (1)
df_3_a2 = df_3[(df_3['AgentId']==1) | (df_3['AgentId']==4)]
# calculate mean result
mean_a0_2012=round(df_3_a0[df_3_a0['X1 transaction date']<2013]['Y house price of unit area'].mean(),1) # (2)
mean_a0_2013=round(df_3_a0[df_3_a0['X1 transaction date']>=2013]['Y house price of unit area'].mean(),1)
mean_a1_2012=round(df_3_a1[df_3_a1['X1 transaction date']<2013]['Y house price of unit area'].mean(),1)
mean_a1_2013=round(df_3_a1[df_3_a1['X1 transaction date']>=2013]['Y house price of unit area'].mean(),1)
mean_a2_2012=round(df_3_a2[df_3_a2['X1 transaction date']<2013]['Y house price of unit area'].mean(),1)
mean_a2_2013=round(df_3_a2[df_3_a2['X1 transaction date']>=2013]['Y house price of unit area'].mean(),1)
(1)裁剪数据表时,如果遇到多个条件的书写格式是什么?
首先,每个条件都要用()
,不能省略;其次,在pandas中,使用and
和or
会报错,必须替换成| &
。
(2)这里使用.mean()
来计算均值,使用round(x, 1)
进行保留一位小数的四舍五入。
计算每年的均值
算法和上面是一致的。
# Year mean
mean_2012=round(df_3[df_3['X1 transaction date']<2013]['Y house price of unit area'].mean(), 1)
mean_2013=round(df_3[df_3['X1 transaction date']>=2013]['Y house price of unit area'].mean(), 1)
Task 4
做出'Task 3'的图形。我们做出柱状图。
res_3.plot(kind='bar', alpha=0.7)