2017-05-03 1 views
2

는 index_pd :팬더 현재 행 * 이전 행 + 이전 행은

tradedate | percent | day_index 
------ | ------| ------ 
2015-06-02 | 0  |  1000 
2015-06-03 | 0.5 |  1500 = 1000 + 1000 * 0.5 
2015-06-04 | 0.6 |  2400 = 1500 + 1500 * 0.6 
..... 

내가

index_pd['day_index'] =index_pd['day_index'].shift(1) * index_pd['percent'].shift(0) + index_pd['day_index'].shift(1) 

을 시도하지만이 두 번째 행에 영향을 :

tradedate | percent | day_index 
------ | ------| ------ 
2015-06-02 | 0  |  1000 
2015-06-03 | 0.5 |  0 
2015-06-04 | 0.6 |  0 
..... 

는 결과를 원한다. 루프 iterrows에 의해 때문에 교체 방법에 배치 index_pd에서 천 행, 감사

+0

두 번째의 원래 값을 유지하려는 경우 당신은 다른 열을 작성해야 열. – TLOwater

+0

어떻게 계산을 일괄 처리 할 수 ​​있습니까? –

+0

배치로 무엇을 의미합니까? 내 원래의 대답은 옳지 않다. 결과를 낮 인덱스에 쓰고 결과를 사용하여 다음 단계를 계산해야한다. – TLOwater

답변

1

하지 아주 좋은 솔루션이있다 : 당신의 계산의 모든 행에

for i, row in index_pd.iterrows(): 
    if i == 0: 
     index_pd.loc[i, 'value'] = index_pd['day_index'].iat[0] 
    else: 
     index_pd.loc[i, 'value'] = index_pd.loc[i,'percent'] * index_pd.loc[i-1, 'value']+ \ 
            index_pd.loc[i-1, 'value'] 
print (index_pd) 
    tradedate percent day_index value 
0 2015-06-02  0.0  1000 1000.0 
1 2015-06-03  0.5   0 1500.0 
2 2015-06-04  0.6   0 2400.0 
0

이전 day_index 값이 (1+index_pd.percent)을 곱한됩니다. 그래서 당신은 결과를 얻을 (1+index_pd.percent)의 누적 제품을 사용하고 day_index의 첫 번째 값이 곱 수 있습니다

index_pd['day_index'] = (index_pd.percent+1).cumprod()*index_pd.day_index.iat[0]