Đây là dataframe tôi:Tối ưu hóa tính toán lặp đi lặp lại các giá trị dựa trên tốc độ tăng trưởng
Date A new_growth_rate
2011/01/01 100
2011/02/01 101
.
2012/01/01 120 0.035
2012/02/01 121 0.035
.
2013/01/01 131 0.036
2013/01/01 133 0.038
Đây là những gì tôi cần:
Date A new_growth_rate
2011/01/01 100
2011/02/01 101
.
.
2012/01/01 103.62 .035 A=100/(1-0.035)
2012/02/01 104.66 .035 A=101/(1-0.035)
.
.
2013/01/01 107.49 .036 A=103.62/(1-0.036)
2013/02/01 108.68 .038 A=104.66/(1-0.038)
tôi cần phải tính giá trị gia tăng dựa trên tốc độ tăng trưởng cho mỗi cột Tôi có một khung dữ liệu với 400 cột và tốc độ tăng trưởng tương ứng của chúng.
Tôi đã tính toán tốc độ tăng trưởng bằng cách sử dụng công thức sau: (one year old value)*(1+current month growth rate)
. giá trị được tính toán này sẽ được sử dụng để nhận giá trị năm tiếp theo, v.v. Như thế này tôi có 400 cột và tốc độ tăng trưởng tương ứng của chúng. Chuỗi thời gian có 30 năm dữ liệu
Hiện tại tôi đang sử dụng 2 cho vòng lặp một để lấy từng cột và sau đó lặp lại trong khoảng thời gian cho mỗi cột và nhận giá trị được tính trước đó cho vòng lặp. Phải mất vài giờ để đi qua 500 hàng và 400 cột dữ liệu. Có cách nào tốt hơn cho này `
đoạn mã của tôi là dưới đây:?
grpby = danh sách các cột trong dataframe
df_new=pd.DataFrame()
for i,row in grpby.iterrows():
df_csr=grwth.loc[(grwth['A']==row['A'])].copy()
a = pd.to_datetime("2011-12-01",format='%Y-%m-%d')
b = a
while b <a+relativedelta.relativedelta(months=420):
b=b+relativedelta.relativedelta(months=1)
val= df_csr.loc[df_csr['Date']==(b+relativedelta.relativedelta(months=-12))].copy()
val2=val.get_value(val.index[0],'Val')
grwth_r=df_csr.loc[df_csr['date']==b]['new_growth_rate'].copy()
grwth_r2=grwth_r.get_value(grwth_r.index[0],'new_growth_rate')
df_csr.loc[df_csr['Date']==b,'Val']=val2/(1-grwth_r2)
df_new=pd.concat([df_new,df_csr])
Vui lòng gửi kèm một [mcve] (http://stackoverflow.com/help/mcve): (? Những gì là 'grwth') cho chúng ta chỉ đủ dữ liệu để chơi với nhưng không –
Look cho series.rolling.apply –
GRWTH là danh sách cột – Sanjay