[英]Sum up values in a cell separated by comma in a dataframe column using python
[英]Calculate values in a new dataframe column using values looked-up in a seperate dataframe using python
(提前抱歉,我是 Stack 的新手,這是我的第一個問題)
我有兩個數據ppd_df:
,一個包含不同屬性的房價, 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
deed_date
為 2015-02-16 的F
財產的deed_date
將是: norm_price
= price_paid
/ ( 205163)
我想我需要創建一個for
循環來遍歷ppd_df
每一行,但我不確定如何去做。 我試過使用.itertuples
。 .merge
和np.searchsorted
就像在Pandas 中一樣:根據另一個 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)
要獲得快速解決方案,您可以執行以下操作:
ppd_df.loc[ppd_df['property_type']=='T','norm_price'] = ppd_df['price_paid']/ave_df['T_price']
property_type 的其余部分也類似。
編輯:您可以通過以下方式使其自動化:
property_type = ppd_df['property_type'].unique()
for property in property_type:
property_col = property + '_price'
ppd_df.loc[(ppd_df['property_type']==property) & (ppd_df['deed_date'].str[:7]==ave_df['month_end'].str[:7]),'norm_price'] = ppd_df['price_paid']/ave_df[property_col]
EDIT:
Check the updated answer. Now it also compares Year/month value of deed_date from ppd_df against month_end value of ave_df.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.