के आधार पर यह मेरा dataframe है:अनुकूलन मूल्यों की पुनरावृत्ति गणना विकास दर
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)
मैं प्रत्येक स्तंभ के लिए विकास दर के आधार पर की गणना करने के लिए मूल्य की जरूरत है:
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
यह मैं क्या जरूरत है मेरे पास 400 कॉलम और उनकी इसी वृद्धि दर के साथ डेटाफ्रेम है।
मैंने निम्नलिखित सूत्र का उपयोग करके विकास दर की गणना की है: (one year old value)*(1+current month growth rate)
। यह गणना मूल्य अगले वर्ष मूल्य प्राप्त करने के लिए उपयोग किया जाएगा और आगे। इस तरह मेरे पास 400 कॉलम और उनकी इसी वृद्धि दर है। समय श्रृंखला प्रत्येक स्तंभ के लिए समय अवधि में पुनरावृति और पाश के लिए पिछले गणना मूल्यों को प्राप्त करने के लिए दूसरे डेटा
वर्तमान में मैं पाश एक के लिए 2 का उपयोग कर रहा प्रत्येक स्तंभ पाने के लिए के 30 साल और उसके बाद है। 500 पंक्तियों और 400 कॉलम डेटासेट में जाने में कुछ घंटे लगते हैं। वहाँ इस के लिए एक बेहतर तरीका है `
मेरे कोड का टुकड़ा नीचे है:?
grpby = 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])
शामिल करें एक [mcve] (http://stackoverflow.com/help/mcve): (? क्या 'grwth' है) हमारे साथ खेलने के लिए पर्याप्त डेटा नहीं बल्कि और अधिक दे –
देखो series.rolling.apply –
GRWTH कॉलम – Sanjay