(对不起,我是Stack的新手,这是我的第一个问题)
我有两个数据框,一个包含不同物业的房价, ppd_df:
price_paid deed_date postcode property_type norm_price
2 36250 2015-11-16 BA1 1JU F
3 48000 2015-11-25 BA2 0HB S
4 60000 2017-08-31 BA1 4NB F
... ... ... ... ... ...
8960 4025000 2015-07-16 BA1 2EU T
并且,每个月每种物业类型的价格平均值查询数据框ave_df
:
D_price S_price T_price F_price price_date month_end
0 459471 285234 247582 208652 2015-01-01 2015-01-31
1 450617 279424 242798 205163 2015-02-01 2015-02-28
2 444885 275747 239328 202948 2015-03-01 2015-03-31
3 443513 274575 238553 201615 2015-04-01 2015-04-30
.........................................................
10 489997 303307 262281 218513 2015-11-01 2015-11-30
11 479240 297111 256468 213380 2015-12-01 2015-12-31
我想将价格标准化,ppd_df
以使价格更具可比性,方法是将每个价格除以price_paid
购买当月该类型房地产的平均房价,并将此新值保存为norm_price
。
因此,norm_price
对于具有2015-02-16的F
属性,deed_date
将为:norm_price
= price_paid
/(205163)
我认为我需要创建一个for
遍历的每一行的循环,ppd_df
但是不确定如何执行该循环。我尝试使用.itertuples
。.merge
而np.searchsorted
像熊猫:选择基于另一个DF DF行。这里的答案似乎也相似,但是我无法解决我的问题。
谢谢!
使用@Prish的解决方案,我可以通过以下几个步骤来回答我的问题:
def norm(row):
t_col = row['property_type'] + '_price'
date = row['deed_date']
d_row = ave_df.index.values[(date >= ave_df['price_date']) & (date <= ave_df['month_end'])]
ave_price = ave_df.loc[d_row, t_col].values[0]
return ave_price
ppd_df['norm_price'] = ppd_df['price_paid'] / ppd_df.apply(lambda row: norm(row), axis=1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句