我正在尝试从100开始获得一个新的df列'dos',然后每个单元格会将它上面的数字乘以'uno'中的相应单元格。出于某种原因,它只是在100之后给我NaN。
GrVsVal = pd.DataFrame(columns = ['uno', 'dos'], index = df_ch.index)
GrVsVal['uno'] = 1 + (df_ch['IVV'] - df_ch['IVE'])
GrVsVal['dos'].ix[0] = 100
GrVsVal['dos'].ix[1:] = GrVsVal['uno'].ix[1:] * GrVsVal['dos'].ix[0:]
print GrVsVal
它给了我:
uno dos
Date
1/2/12 .997 100
1/3/12 .677 NaN
1/4/12 .986 NaN
所以第一个NaN应该是100 * .677,第二个NaN将是第一个NaN * .986的结果
答案 0 :(得分:1)
有点难以分辨代码中的某些内容。但是这得到了你想要的结果(如果我理解正确的话):
import pandas as pd
date = ['1/2/12', '1/3/12', '1/4/12']
uno = [.997, .677, .986]
GrVsVal = pd.DataFrame({'date': date, 'uno':uno})
dos = [100]
i = 0
for u in GrVsVal.iterrows():
while i+1 < len(GrVsVal['uno']):
dos.append(GrVsVal['uno'][i+1]*dos[i])
i += 1
GrVsVal['dos'] = dos
print(GrVsVal)
运行它,你会看到结果。然后根据需要调整代码。 编辑:抱歉,我搞砸了。现在应该修好。
答案 1 :(得分:1)
GrVsVal = pd.DataFrame({'uno': 1 + df_ch['IVV'] - df_ch['IVE']}, index = df_ch.index)
GrVsVal['dos'] = 100
GrVsVal.loc[1:, 'dos'] = GrVsVal.uno[1:].cumprod() * 100
>>> GrVsVal
uno dos
Date
1/2/12 0.997 100.0000
1/3/12 0.677 67.7000
1/4/12 0.986 66.7522